Oracle Blog

Thursday Jul 11, 2013

Good news for Oracle WebLogic Server users! Oracle WebLogic Server 12.1.2 has been made available for download today. See the press release for more on what is included in the overall Cloud Application Foundation 12c release.

Oracle WebLogic Server is the #1 application server in the industry, enabling deployment from conventional systems to cloud environments. This means you can choose to deploy the same applications on standard Windows/Unix platforms, on Oracle Exalogic Elastic Cloud to leverage engineered systems optimizations, or in private or public clouds such as the Oracle Cloud. Oracle WebLogic Server 12.1.2 adds new capabilities that extend its leadership for all of these deployment environments. Here's a brief summary.

First, we've delivered enhancements to make Oracle WebLogic Server 12.1.2 the ideal mission critical cloud platform, with unmatched performance, scalability and availability. New integration features with Oracle Database 12c deliver availability, multi-tenancy and scalability benefits for your on-premise clouds using Oracle's latest database technology. Dynamic cluster support make it easy to create high-availability cluster configurations, and to scale them up or down as performance requirements dictate. Additional optimizations for Exalogic Elastic Cloud Systems deliver new performance benefits - up to 3x performance improvements for JMS applications. Oracle Coherence 12.1.2 has also been released, with new powerful features that can be leveraged in mission-critical applications.

Third, we continue to invest in providing a modern development platform that enables developers to accelerate delivery of innovative applications. Enhancements to our Maven integration with updated plug-ins, POMs and archetypes make it easier to use build Oracle WebLogic Server, Coherence, TopLink, and Fusion Middleware applications with Maven-based repositories and build systems. We've added support for the WebSocket protocol standard for delivery of rich, interactive applications for standard HTML5 and mobile clients. Oracle TopLink Data Services make it easy to generate RESTful interfaces to enterprise data sources and deliver services for rich client applications built with JavaScript or similar technologies. Updated releases of Oracle JDeveloper, Oracle Enterprise Pack for Eclipse, and Oracle Application Development Framework are available with new features for productive application development.

Taken together, these new capabilities make Oracle WebLogic Server 12.1.2 a compelling platform for developing and deploying your next generation of applications, and upgrading your existing applications. You'll be hearing more about all of the above capabilities during the coming weeks. Some things you can do today:

One of the hot new features in Oracle database 12c is Application Continuity (AC). The feature basically will detect that a connection has gone bad and substitute a new one under the covers (I'll talk about it more in another article). To be able to do that, the application is given a connection wrapper instead of the real connection. Wrappers or dynamic proxies can only be generated for classes based on interfaces. The Oracle types, like REF and ARRAY, were originally introduced as concrete classes. In WLS 10.3.6 and/or the JDBC 11.2.0.3 driver, there are new interfaces for the Oracle types that you will need to use to take advantage of this new AC feature.

First, some history so that you understand the needed API changes. In the early days of WebLogic data source, any references to vendor proprietary methods were handled by hard-coded references. Keeping up with adding and removing methods was a significant maintenance problem. At the peak of the insanity, we had over one thousand lines of code that referenced Oracle-proprietary methods and the server could not run without an Oracle jar in the classpath (even for DB2-only shops). In release 8.1 in March 2003, we introduced wrappers for all JDBC objects such that we dynamically generated proxies that implement all public interface methods of, and delegate to, the underlying vendor object. The hard-coded references and the maintenance nightmare went away and just as importantly, we could provide debugging information, find leaked connections, automatically close objects when the containing object closed, replace connections that fail testing, etc. The Oracle types were concrete classes so proxies were generated for these classes implementing the WLS vendor interfaces weblogic.jdbc.vendor.oracle.*. Applications can cast to the WLS vendor interfaces or use getVendorObj to access the underlying driver object. Later, we added an option to unwrap data types, with a corresponding loss of functionality like no debug information.

Although the focus of this article is Oracle types, the dynamic proxies work for any vendor. For example, you can cast a DB2 connection to use a proprietary method ((com.ibm.db2.jcc.DB2Connection)conn).setDB2ClientUser("myname").

Starting with Oracle driver 11.2.0.3, the database team needed wrappers for the new AC feature and introduced new interfaces. For WebLogic data source users, that's good news - no more unwrapping, the weblogic.jdbc.vendor package is no longer needed, and it's all transparent. Before you go and change your programs to use the new Oracle proprietary interfaces, the recommended approach is to first see if you can just use standard JDBC API's. In fact, as part of defining the new interfaces, Oracle proprietary methods were dropped if there was an equivalent standard JDBC API or the method was not considered to add significant value. This table defines the mapping. The goal is to get rid of references to the first and second columns and replace them with the third column.

" align="center">Old Oracle types

Deprecated WLS Interface

New interfaces

oracle.sql.ARRAY

weblogic.jdbc.vendor.oracle.OracleArray

oracle.jdbc.OracleArray

oracle.sql.STRUCT

weblogic.jdbc.vendor.oracle.OracleStruct

oracle.jdbc.OracleStruct

oracle.sql.CLOB

weblogic.jdbc.vendor.oracle.OracleThinClob

oracle.jdbc.OracleClob

oracle.sql.BLOB

weblogic.jdbc.vendor.oracle.OracleThinBlob

oracle.jdbc.OracleBlob

oracle.sql.REF

weblogic.jdbc.vendor.oracle.OracleRef

oracle.jdbc.OracleRef

This is a job for a shell hacker! Much of it can be automated and the compiler can tell you if you are referencing a method that has gone away - then check if the missing method is in the equivalent jdbc.sql interface (e.g., getARRAY() becomes the JDBC standard getArray()).

You can take a look at a sample program that I wrote to demonstrate all of these new interfaces at https://blogs.oracle.com/WebLogicServer/resource/StephenFeltsFiles/OracleTypes.txt (note that this is actually a ".java" program). It covers programming with all of these Oracle types. While use of Blob and Clob might be popular, Ref and Struct might not be used as much. The sample program shows how to create, insert, update, and access each type using both standard and extension methods. Note that you need to use the Oracle proprietary createOracleArray() instead of the standard createArrayOf(). Although the sample program doesn't use the standard createBlob() or createClob(), these are supported for the Oracle driver.