Programming WebLogic JTA

      

Using Third-Party JDBC XA Drivers with WebLogic Server

This section discusses the following topics:

 


Overview of Third-Party XA Drivers

This section provides an overview of using third-party JDBC drivers with WebLogic Server in distributed transactions. These drivers provide connectivity between WebLogic Server connection pools and the DBMS. Drivers used in distributed transactions are designated by the driver name followed by /XA; for example, Oracle Thin/XA Driver.

 

Table of Third-Party XA Drivers

The following table summarizes known functionality of these third-party JDBC/XA drivers when used with WebLogic Server:

Table 10-1 Two-Tier JDBC/XA Drivers
Driver/Database Version Comments
Oracle Thin Driver XA See Using Oracle Thin/XA Driver.
Sybase jConnect/XA

  • Version 6.0

  • Version 5.5

  • Adaptive Server Enterprise 12.0
See Using Sybase jConnect 5.5 and 6.0/XA Drivers.

 


Using Oracle Thin/XA Driver

WebLogic Server ships with the Oracle Thin Driver version 10g preconfigured and ready to use. If you want to update the driver or use a different version, see “Using Orace Extensions with the Oracle Thin Driver” in Programming WebLogic JDBC.

The following sections provide information for using the Oracle Thin/XA Driver with WebLogic Server.

 

Software Requirements for the Oracle Thin/XA Driver

The Oracle Thin/XA Driver requires the following:

 

Set the Environment for the Oracle Thin/XA Driver

Configure WebLogic Server

See “Using Oracle Extensions with the Oracle Thin Driver” in Configure WebLogic JDBC.

Enable XA on the Database Server

To prepare the database for XA, perform these steps:

  1. Log on to sqlplus as system user, e.g. sqlplus sys/CHANGE_ON_INSTALL@<DATABASE ALIAS NAME>

  2. Execute the following command: @xaview.sql

    The xaview.sql script resides in the $ORACLE_HOME/rdbms/admin directory

  3. Grant the following permissions:

    • grant select on v$xatrans$ to public (or <user>);

    • grant select on pending_trans$ to public;

    • grant select on dba_2pc_pending to public;

    • grant select on dba_pending_transactions to public;

    • (when using the Oracle Thin driver 10.1.0.3 or later)
      grant execute on dbms_system to <user>;

If the above steps are not performed on the database server, normal XA database queries and updates may work fine. However, when the Weblogic Server Transaction Manager performs recovery on a re-boot after a crash, recover for the Oracle resource will fail with XAER_RMERR. Crash recovery is a standard operation for an XA resource.

 

Oracle Thin/XA Driver Configuration Properties

The following table contains sample code for configuring a JDBC data source:

Oracle Thin/XA Driver: Connection Pool Configuration
Property Name Property Value
Name oracleXAPool
URL jdbc:oracle:thin:@serverName:port(typically 1521 on Windows):sid
DriverClassname oracle.jdbc.xa.client.OracleXADataSource
Database Username Scott
Properties user=scott
Test Table Name DUAL

 


Using Sybase jConnect 5.5 and 6.0/XA Drivers

The following sections provide important configuration information and performance issues when using the Sybase jConnect Driver 5.5 and 6.0/XA Drivers:

 

Configuring a Sybase Server for XA Support

Follow these instructions to set up the environment on your database server:

To prevent deadlocks when running transactions, enable row level lock by default:

Both the jConnect.jar, jconn2, and jconn3.jar files are included in the WL_HOME\server\lib folder and are referenced in the weblogic.jar manifest file. When you start WebLogic Server, the drivers are loaded automatically and are ready to use with WebLogic Server. To use these drivers with the WebLogic utilities or with other applications, include the path to these files in your CLASSPATH.

 

XA and Sybase Adaptive Server

Correct support for XA connections is available in the Sybase Adaptive Server Enterprise 12.0 and later versions only. XA connections with WebLogic Server are not supported on Sybase Adaptive Server 11.5 and 11.9.

Execution Threads and Transactions in Sybase Adaptive Server

Prior to Adaptive Server version 12.0, all resources of a transaction were privately owned by a single task on the server. The server could not share a transaction with any task other than the one that initiated the transaction. Adaptive Server version 12.x includes support for the suspend and join semantics used by XA-compliant transaction managers (such as WebLogic Server). Transactions can be shared among different execution threads, or may not be associated with an execution thread (detached).

Setting the Timeout for Detached Transactions

On the Sybase server, you can set the dtm detach timeout period, which sets the amount of time (in minutes) that a distributed transaction branch can remain in the detached state (without an associated execution thread). After this period, the DBMS automatically rolls back the transaction. The dtm detach timeout period applies to all transactions on the database server. It cannot be set for each transaction.

For example, to automatically rollback transactions after being detached for 10 minutes, use the following command:

sp_configure 'dtm detach timeout period', 10

You should set the dtm detach timeout period higher than the transaction timeout to prevent the database server from rolling back the transaction before the transaction times out in WebLogic Server.

For more information about the dtm detach timeout period, see the Sybase documentation.

Transaction Behavior on Sybase Adaptive Server

If a global transaction is started on the Sybase server, but is not completed, the outcome of the transaction varies depending on the transaction state before the transaction is abandoned:

 

Configuration Properties for Java Clients

Set the following configuration properties when running a Java client.

Table 10-2 Sybase jConnect 5.5/XA Driver: Java Client Connection Properties
Property Name Property Value
ds.setPassword <password>
ds.setUser <username>
ds.setNetworkProtocol Tds
ds.setDatabaseName <database-name>
ds.setResourceManagerName <Lrm name in xa_config file>
ds.setResourceManagerType 2
ds.setServerName <machine host name>
ds.setPortNumber port (Typically 4100)

 

Known Sybase jConnect 5.5 and 6.0/XA Issues

These are the known issues and Oracle workarounds:

Table 10-3 Sybase jConnect 5.5 and 6.0 Known Issues and Workarounds
Description Sybase Bug Comments/Workarounds for WebLogic Server
When calling setAutoCommit(true) the following exception is thrown:
java.sql.SQLException: JZ0S3: The inherited method setAutoCommit(true) cannot be used in this subclass.
10726192 No workaround. Vendor fixed in jConnect 6.0.

When driver used in distributed transactions, calling XAResource.end(TMSUSPEND) followed by XAResource.end(TMSUCCESS) results in XAER_RMERR.

10727617 WebLogic Server has provided an internal workaround for this bug: Set the data source connection pool property XAEndOnlyOnce="true". Vendor fix has been requested.

 


Using Other Third-Party XA Drivers

To use other third-party XA-compliant JDBC drivers, include the path to the driver class libraries in your CLASSPATH and follow the configuration instructions provided by the vendor.