WebLogic Server でのサードパーティ JDBC XA ドライバの使い方
この章では次の内容について説明します。
サードパーティ XA ドライバの概要
この節では、分散トランザクションにおける WebLogic Server でのサードパーティ JDBC 2 層ドライバの使い方について説明します。これらのドライバは、WebLogic Server 接続プールと DBMS の間の接続を提供します。分散トランザクションで使用するドライバは、後に「/XA」が続くドライバ名 (Oracle Thin/XA ドライバなど) によって指定されます。
サードパーティ XA ドライバの表
次の表に、サード パーティ JDBC/XA ドライバを WebLogic Server で使用する場合の確認済みの機能について示します。
サードパーティ ドライバのコンフィグレーションとパフォーマンス要件
次に、WebLogic Server で特定のサードパーティ XA ドライバを使用するための要件とガイドラインを示します。
注意: ここに掲載されていないサードパーティ ドライバを使用する場合、接続プール プロパティの追加設定が必要となる場合があります。詳細については、『管理者ガイド』の「追加の XA 接続プール プロパティ」を参照してください。
Oracle Thin/XA ドライバの使い方
WebLogic Server にバンドルされた Oracle Thin Driver 8.1.7 は事前にコンフィグレーションされ、そのまま使用できる状態になっています。Oracle Thin ドライバ バージョン 9.0.1 を使用する場合は、『WebLogic JDBC プログラマーズ ガイド』の「Oracle Thin Driver の変更または更新」を参照してください。
WebLogic Server で Oracle Thin/XA ドライバを使用するための情報を以下の節で示します。
Oracle Thin/XA ドライバのソフトウェア要件
Oracle Thin/XA ドライバのソフトウェア要件は次のとおりです。
- JDK 1.2.x 以降 (JDK 1.3.1_XX を含む WebLogic Server)
- サーバのバージョンは WebLogic Server で使用しているドライバのバージョンと一致する必要がある。たとえば、Oracle Thin/XA ドライバ バージョン 8.1.7 を使用している場合は、Oracle サーバもバージョン 8.1.7 をインストールしてください。
Oracle Thin 8.1.7/XA ドライバの確認済みの問題
次の表に、確認済みの問題と BEA の回避策を示します。
表7-2 Oracle Thin ドライバの確認済みの問題と回避策
説明
|
Oracle のバグ
|
説明/WebLogic Server の回避策
|
ORA-01453 - 「SET TRANSACTION をトランザクションの最初の文にする必要があります」
|
|
Oracle Thin/XA 8.1.7 ドライバを使用する場合には、トランザクションのトランザクション アイソレーション レベルを変更できない。トランザクションは、データベースに対して設定されているデフォルトのトランザクション アイソレーションを使用する。
|
ORA-01002 - 「フェッチ順序が無効です」例外。XAResource.end(TMSUSPEND) 結果および XAResource.start(TMRESUME) 結果の後で結果セットを反復すると ORA-01002 になる。
|
-
|
回避策として、文のフェッチサイズを結果セットのサイズ以上に設定する。つまり、この回避策を使用しない限り、Oracle Thin 8.1.7 ドライバをクライアント サイドでは使用できない。または、メソッド呼び出しの間、Bean では結果セットを開いておくことができない。
|
XAResource.end(TMSUSPEND) に XAResource.end(TMSUCCESS) を続けると、XAER_RMERR になる。
|
1527725
|
WebLogic Server では、このバグに対する内部的な回避策を提供している。
|
マルチスレッド XA で使用する場合、ドライバはハングするか、XAER_RMERR になる。
|
1569235
|
WebLogic Server では、このバグに対する内部的な回避策を提供している。
|
グローバル トランザクションのない更新がサポートされない。更新時にグローバル トランザクションがない場合、更新を実行するためにローカル トランザクションが暗黙的に開始され、グローバル トランザクションと同じ XA 接続が再利用されるために XAER_RMERR になる。
さらに、アプリケーションがローカル トランザクションのコミットを試みる (自動コミットを true に設定する、または Connection.commit() を明示的に呼び出す) と、Oracle XA ドライバが「SQLException: Use explicit XA call」を返す。
|
-
|
アプリケーションで XA ドライバを使用して更新を行う場合は、有効なグローバル トランザクション コンテキストが存在していなければならない。つまり、Bean メソッドには、トランザクション属性として Required、RequiresNew、または Mandatory を持たせる必要がある。
|
XAResource.recover が、入力フラグに関係なく、不明な Xid のセットを繰り返し返す。XA 仕様では、トランザクション マネージャはまず TMSTARTRSCAN で XAResource.recover を呼び出し、続いて Xid が返されなくなるまで繰り返し TMNOFLAGS で XAResource.recover を呼び出す。このバグが原因で無限反復が発生し、Oracle カーソルが使い果たされたことを示す「ORA-01000: 最大オープン カーソル数を超えました」というエラーが表示される。
|
-
|
WebLogic Server では、この問題に対する内部的な回避策を提供している。
|
Oracle Thin/XA ドライバの環境の設定
WebLogic Server のコンフィグレーション
WebLogic Server にバンドルされた Oracle Thin Driver 8.1.7 は事前にコンフィグレーションされ、そのまま使用できる状態になっています。Oracle Thin ドライバ バージョン 9.0.1 を使用する場合は、WL_HOME¥server¥lib の classes12.zip のバージョンをバージョン 9.0.1 に代える必要があります。『WebLogic JDBC プログラマーズ ガイド』の「Oracle Thin Driver の変更または更新」を参照してください。
注意: classes12.zip ファイルは、WL_HOME¥server¥lib フォルダにあり、マニフェスト ファイル weblogic.jar で参照されます。WebLogic Server を起動する時に、ドライバが自動的にロードされ、WebLogic Server で使用する準備が整います。このドライバを WebLogic ユーティリティまたは他のアプリケーションで使用するには、このファイルのパスを CLASSPATH で指定する必要があります。
XA のデータベース サーバでの有効化
XA 用のデータベースを準備するには、以下の操作を実行します。
- システム ユーザとして sqlplus にログオンします (sqlplus sys/CHANGE_ON_INSTALL@<DATABASE ALIAS NAME> など)。
- 次の sql を実行します。 grant select on DBA_PENDING_TRANSACTIONS to public
上の手順をデータベース サーバ上で実行しない場合、通常の XA データベース クエリと更新は正常に動作できます。ただし、クラッシュ後の再起動に続き、WebLogic Server トランザクション マネージャが回復を行うときに、Oracle リソース の回復は XAER_RMERR になり失敗します。
Oracle Thin/XA ドライバのコンフィグレーション プロパティ
次の表に、接続プールのコンフィグレーションのためのサンプル コードを示します。
Oracle Thin/XA ドライバ : 接続プール コンフィグレーション
プロパティ名
|
プロパティ値
|
Name
|
jtaXAPool
|
Targets
|
myserver,server1
|
URL
|
jdbc:oracle:thin:@serverName:port (Windows では通常 1521):sid
|
DriverClassname
|
oracle.jdbc.xa.client.OracleXADataSource
|
Initial Capacity
|
1
|
MaxCapacity
|
20
|
CapacityIncrement
|
2
|
Properties
|
user=scott password=tiger
|
次の表に、TxDataSource のコンフィグレーションのためのサンプル コードを示します。
表7-3 Oracle Thin/XA ドライバ : TxDataSource のコンフィグレーション
プロパティ名
|
プロパティ値
|
Name
|
jtaXADS
|
Targets
|
myserver,server1
|
JNDIName
|
jtaXADS
|
PoolName
|
jtaXAPool
|
Sybase jConnect 5.5/XA ドライバの使い方
Sybase jConnect 5.5/XA ドライバを使用する場合の重要なコンフィグレーション情報とパフォーマンス問題を以下の節で示します。
Sybase jConnect 5.5/XA ドライバの確認済みの問題
次に、確認済みの問題と BEA の回避策を示します。
表7-4 Sybase jConnect 5.5 の確認済みの問題と回避策
説明
|
Sybase のバグ
|
説明/WebLogic Server の回避策
|
setAutoCommit (true) を呼び出すと次の例外が送出される。
java.sql.SQLException:JZ0S3:The inherited method setAutoCommit(true) cannot be used in this subclass.
|
10726192
|
回避策はなし。ベンダによる修正が必要。
|
分散トランザクションでドライバを使用する場合、XAResource.end(TMSUSPEND) に続けて XAResource.end(TMSUCCESS) を呼び出すと、XAER_RMERR になる。
|
10727617
|
WebLogic Server では、このバグに対する内部的な回避策を提供している。
接続プールのプロパティを XAEndOnlyOnce="true" に設定する。
ベンダによる修正が要求されている。
|
Sybase jConnect/XA ドライバの環境の設定
データベース サーバで環境を設定するには、以下の説明に従います。
- 分散トランザクション管理のライセンスをインストールします。
- sp_configure "enable DTM",1 を実行して、トランザクションを有効にします。
- sp_configure "enable xat coordination",1 を実行します。
- <USER_NAME> にロール dtm_role を付与します。
- SYBASE_INSTALL¥OCS-12_0¥sample¥xa-dtm サブディレクトリにあるサンプルの xa_config ファイルを、3 レベル上位の SYBASE_INSTALL へコピーします。SYBASE_INSTALL は、Sybase サーバをインストールしたディレクトリです。たとえば、次のように指定します。
$ SYBASE_INSTALL¥xa_config
- xa_config ファイルを編集します。最初の [xa] セクションで、サンプル サーバ名を適切なサーバ名に変更します。
トランザクションを実行するときのデッドロックを防ぐために、デフォルトで低レベル ロックを有効にします。
- sp_configure "lock scheme",0,datarows を実行します。
注意: jConnect.jar および jconn2.jar ファイルは、2 つとも WL_HOME¥server¥lib フォルダに含まれ、マニフェスト ファイル weblogic.jar で参照されます。WebLogic Server を起動する時に、ドライバが自動的にロードされ、WebLogic Server で使用する準備が整います。これのドライバを WebLogic ユーティリティまたは他のアプリケーションで使用するには、これらのファイルのパスを CLASSPATH で指定します。
Sybase jConnect 5.5/XA ドライバの接続プール
次の表に、接続プールのコンフィグレーションのためのサンプル コードを示します。
表7-5 Sybase jConnect 5.5/XA ドライバ : サンプル接続プール コンフィグレーション
プロパティ名
|
プロパティ値
|
Name
|
jtaXAPool
|
Targets
|
myserver,server1
|
DriverClassname
|
com.sybase.jdbc2.jdbc.SybXADataSource
|
Properties
|
User=dbuser;
DatabaseName=dbname;
ServerName=server_name_or_IP_address;
PortNumber=serverPortNumber;
NetworkProtocol=Tds;
resourceManagerName=Lrm_name_in_xa_config;
resourceManagerType=2
|
Initial Capacity
|
1
|
MaxCapacity
|
10
|
CapacityIncrement
|
1
|
Supports Local Transaction
|
True
|
ここで、Lrm_name は Logical Resource Manager 名を参照します。
注意: また、config.xml ファイルの接続プール タグに KeepXAConnTillTxComplete="true" を追加する必要があります。詳細については、『管理者ガイド』の「追加の XA 接続プール プロパティ」を参照してください。
次の表に、TxDataSource のコンフィグレーションのためのサンプル コードを示します。
表7-6 Sybase jConnect 5.5/XA ドライバ : TxDataSource のコンフィグレーション
プロパティ名
|
プロパティ値
|
Name
|
jtaXADS
|
Targets
|
server1
|
JNDIName
|
jtaXADS
|
PoolName
|
jtaXAPool
|
Java クライアントのコンフィグレーション プロパティ
Java クライアントを実行する場合の以下のコンフィグレーション プロパティを設定します。
表7-7 Sybase jConnect 5.5/XA ドライバ : Java クライアント接続プロパティ
プロパティ名
|
プロパティ値
|
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 (通常は 4100)
|
その他のサードパーティ XA ドライバ
その他のサードパーティ製 XA 準拠 JDBC ドライバを使用するためには、ドライバ クラス ライブラリのパスを CLASSPATH で指定し、ベンダーの説明に従う必要があります。