Oracle® Fusion Middleware Oracle WebLogic Server JTAのプログラミング 11g リリース1 (10.3.6) B61631-05 |
|
前 |
次 |
この章では、WebLogic Serverでの様々なXA JDBCドライバの使用方法について説明します。
この項では、分散トランザクションにおけるWebLogic ServerでのXA JDBCドライバの使い方について説明します。これらのドライバは、WebLogic Server接続プールとDBMSの間の接続を提供します。分散トランザクションで使用するドライバは、後に「/XA」が続くドライバ名(Oracle Thin/XA Driverなど)によって指定されます。
次の表に、これらのJDBC/XAドライバをWebLogic Serverで使用する場合の確認済の機能について示します。
表10-1 2層JDBC/XAドライバ
ドライバ/データベースのバージョン | 説明 |
---|---|
Oracle Thin Driver XA |
「Oracle Thin/XA Driverの使い方」を参照してください。 |
Sybase jConnect/XA
|
WebLogic Serverに付属するOracle Thin Driver 10gは事前に構成され、そのまま使用できる状態になっています。ドライバを更新する場合や異なるバージョンを使用する場合は、『Oracle WebLogic Server JDBCのプログラミング』のOracle Thin DriverでのOracle拡張機能の使用に関する項を参照してください。
WebLogic ServerでOracle Thin/XA Driverを使用するための情報を以下の節で示します。
Oracle Thin/XA Driverのソフトウェア要件は次のとおりです。
Java 2 SDK 1.4.x以降。
注意: Java 2 SDK 1.4.Xで使用できるバージョンは、Oracle Thin Driver 10gおよび9.2 ( |
XAトランザクション・サポート用に構成されたOracleサーバー。
以下の節では、Oracle Thin/XA Driverの環境を設定する方法について説明します。
『Oracle WebLogic Server JDBCのプログラミング』のOracle Thin DriverでのOracle拡張機能の使用に関する項を参照してください。
XA用のデータベースを準備するには、以下の操作を実行します。
システム・ユーザーとしてsqlplusにログオンします(sqlplus sys/CHANGE_ON_INSTALL@<DATABASE ALIAS NAME>
など)。
次のコマンドを実行します。@xaview.sql
スクリプトxaview.sql
は、$ORACLE_HOME/rdbms/admin
ディレクトリにあります。
以下の権限を与えます。
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;
(Oracle Thin driver 10.1.0.3以降をお使いの場合)
grant execute on dbms_system to <user>;
上の手順をデータベース・サーバー上で実行しない場合、通常のXAデータベース問合せと更新は正常に動作できます。ただし、クラッシュ後の再起動に続き、WebLogic Serverトランザクション・マネージャがリカバリを行うときに、OracleリソースのリカバリはXAER_RMERR
になり失敗します。クラッシュのリカバリは、XAリソースに対する標準的な処理です。
Sybase jConnect 5.5および6.0/XA Driverを使用する場合の重要な構成情報とパフォーマンス問題を以下の節で示します。
データベース・サーバーで環境を設定するには、以下の説明に従います。
sp_configure "enable DTM",1
を実行して、トランザクションを有効にします。
sp_configure "enable xact coordination",1
を実行します。
grant role dtm_tm_role to <USER_NAME>
を実行します。
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
を実行します。
注意: 現在、 |
XA接続が適切にサポートされているのは、Sybase Adaptive Server Enterprise 12.0以降のバージョンのみになります。WebLogic ServerとのXA接続はSybase Adaptive Server 11.5および11.9ではサポートされていません。
Adaptive Server 12.0より前のバージョンでは、トランザクションのすべてのリソースが、サーバー上の単一のタスクによって非公開で所有されていました。サーバーは、トランザクションを開始したタスク以外のタスクとはトランザクションを共有できませんでした。Adaptive Serverバージョン12.xには、XA準拠のトランザクション・マネージャ(WebLogic Serverなど)によって使用されるサスペンドおよび結合のセマンティクスに対するサポートが含まれています。トランザクションは異なる実行スレッド間で共有できます。つまり、1つの実行スレッドに関連付けることはできません(デタッチ状態)。
Sybaseサーバーでは、dtm detach timeout period
を設定することで、分散トランザクション・ブランチがデタッチ状態(関連付けられた実行スレッドがない状態)のままでいる時間(分単位)を設定できます。この時間が経過すると、DBMSは自動的にトランザクションをロールバックします。dtm detach timeout period
は、データベース・サーバー上のすべてのトランザクションに適用されます。個々のトランザクションに対しては設定できません。
たとえば、10分のデタッチ状態が経過した後、自動的にトランザクションをロールバックするには、次のコマンドを使用します。
sp_configure 'dtm detach timeout period', 10
WebLogic Serverでトランザクションがタイムアウトする前にデータベース・サーバーによってトランザクションがロールバックされないように、dtm detach timeout period
はトランザクションのタイムアウトより大きい値に設定する必要があります。
dtm detach timeout period
の詳細は、Sybaseのドキュメントを参照してください。
Sybaseサーバーでグローバル・トランザクションが開始されているが、完了していない場合、そのトランザクションの結果は、破棄される前のトランザクションの状態によって異なります。
xa.end
呼出しの前にクライアントが終了した場合、トランザクションはロールバックされます。
xa.end
呼出しの後にクライアントが終了した場合、トランザクションはデータベース・サーバー上に残ります(すべての関連するロックを保持します)。
アプリケーションがxa.start
を呼び出したが、xa.end
をまだ呼び出していないときに不意に終了した場合は、データベース・サーバーが即座にトランザクションをロールバックし、トランザクションによって保持されていたロックを解放します。
アプリケーションがxa.start
およびxa.end
を呼び出して、アプリケーションが予期せず終了した場合、データベース・サーバーは、dtm detach timeout period
で指定した時間が経過した後でトランザクションをロールバックし、トランザクションによって保持されていたロックを解放します。「デタッチされたトランザクションに対するタイムアウトの設定」を参照してください。
アプリケーションがxa.start
およびxa.end
を呼び出し、トランザクションの準備が完了していたときに、アプリケーションが不意に終了した場合は、正常にリカバリできるようにトランザクションは存続します。トランザクション・マネージャはrollbackまたはcommitを呼び出し、トランザクションを完了する必要があります。
Javaクライアントを実行する場合の以下の構成プロパティを設定します。
表10-3 Sybase jConnect 5.5/XA Driver: 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 |
|
次に、既知の問題とOracleの回避策を示します。
表10-4 Sybase jConnect 5.5および6.0の既知の問題と回避策
説明 | Sybaseのバグ | コメント/WebLogic Serverの回避策 |
---|---|---|
java.sql.SQLException: JZ0S3: The inherited method setAutoCommit(true) cannot be used in this subclass. |
10726192 |
回避策はありません。jConnect 6.0でベンダーにより修正済みです。 |
分散トランザクションでドライバを使用する場合、 |
10727617 |
WebLogic Serverでは、このバグに対する内部的な回避策を提供しています。 データ・ソースの接続プールのプロパティを ベンダーによる修正がリクエストされています。 |
その他のXA準拠JDBCドライバを使用するためには、ドライバ・クラス・ライブラリのパスをCLASSPATHで指定した上で、ベンダーの説明に従って操作を行う必要があります。