ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server JTAのプログラミング
11gリリース1 (10.3.6)
B61631-04
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

10 WebLogic ServerでのJDBC XAドライバの使い方

この章では、WebLogic Serverでの様々なXA JDBCドライバの使用方法について説明します。

XAドライバの概要

この項では、分散トランザクションにおけるWebLogic ServerでのXA JDBCドライバの使い方について説明します。これらのドライバは、WebLogic Server接続プールとDBMSの間の接続を提供します。分散トランザクションで使用するドライバは、後に「/XA」が続くドライバ名(Oracle Thin/XA Driverなど)によって指定されます。

XAドライバの表

次の表に、これらのJDBC/XAドライバをWebLogic Serverで使用する場合の確認済の機能について示します。

表10-1 2層JDBC/XAドライバ

ドライバ/データベースのバージョン 説明

Oracle Thin Driver XA

「Oracle Thin/XA Driverの使い方」を参照してください。

Sybase jConnect/XA

  • バージョン6.0

  • バージョン5.5

  • Adaptive Server Enterprise 12.0

「Sybase jConnect 5.5および6.0/XA Driverの使い方」を参照してください。


Oracle Thin/XA Driverの使い方

WebLogic Serverに付属するOracle Thin Driver 10gは事前に構成され、そのまま使用できる状態になっています。ドライバを更新する場合や異なるバージョンを使用する場合は、『Oracle WebLogic Server JDBCのプログラミング』の「Oracle Thin DriverでのOracle拡張機能の使用」を参照してください。

WebLogic ServerでOracle Thin/XA Driverを使用するための情報を以下の節で示します。

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 (ojdbc14.jar)のみです。

  • XAトランザクション・サポート用に構成されたOracleサーバー。

Oracle Thin/XA Driverの環境の設定

以下の節では、Oracle Thin/XA Driverの環境を設定する方法について説明します。

WebLogic Serverの構成

『Oracle WebLogic Server JDBCのプログラミング』の「Oracle Thin DriverでのOracle拡張機能の使用」を参照してください。

XAのデータベース・サーバーでの有効化

XA用のデータベースを準備するには、以下の操作を実行します。

  1. システム・ユーザーとしてsqlplusにログオンします(sqlplus sys/CHANGE_ON_INSTALL@<DATABASE ALIAS NAME>など)。

  2. 次のコマンドを実行します。@xaview.sql

    スクリプトxaview.sqlは、$ORACLE_HOME/rdbms/adminディレクトリにあります。

  3. 以下の権限を与えます。

    • 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リソースに対する標準的な処理です。

Oracle Thin/XA Driverの構成プロパティ

次の表に、JDBCデータ・ソースの構成のためのサンプル・コードを示します。

表10-2 Oracle Thin/XA Driver :接続プール構成

プロパティ名 プロパティ値

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


Sybase jConnect 5.5および6.0/XA Driverの使い方

Sybase jConnect 5.5および6.0/XA Driverを使用する場合の重要な構成情報とパフォーマンス問題を以下の節で示します。

XAをサポートするためのSybaseサーバーの構成

データベース・サーバーで環境を設定するには、以下の説明に従います。

  • 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を実行します。


    注意:

    現在、jConnect.jarjconn2、およびjconn3.jarは、WebLogic Serverの付属ファイルではありません。ただし、Sybaseドライバは、Sybaseから直接ダウンロードできます。

XAとSybase Adaptive Server

XA接続が適切にサポートされているのは、Sybase Adaptive Server Enterprise 12.0以降のバージョンのみになります。WebLogic ServerとのXA接続はSybase Adaptive Server 11.5および11.9ではサポートされていません。

Sybase Adaptive Serverにおける実行スレッドとトランザクション

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 Adaptive Serverでのトランザクションの動作

Sybaseサーバーでグローバル・トランザクションが開始されているが、完了していない場合、そのトランザクションの結果は、破棄される前のトランザクションの状態によって異なります。

  • xa.end呼出しの前にクライアントが終了した場合、トランザクションはロールバックされます。

  • xa.end呼出しの後にクライアントが終了した場合、トランザクションはデータベース・サーバー上に残ります(すべての関連するロックを保持します)。

  • アプリケーションがxa.startを呼び出したが、xa.endをまだ呼び出していないときに不意に終了した場合は、データベース・サーバーが即座にトランザクションをロールバックし、トランザクションによって保持されていたロックを解放します。

  • アプリケーションがxa.startおよびxa.endを呼び出し、不意に終了した場合は、データベース・サーバーは、dtm detach timeout periodで指定した時間が経過した後でトランザクションをロールバックし、トランザクションによって保持されていたロックを解放します。「デタッチされたトランザクションに対するタイムアウトの設定」を参照してください。

  • アプリケーションがxa.startおよびxa.endを呼び出し、トランザクションの準備が完了していたときに、アプリケーションが不意に終了した場合は、正常にリカバリできるようにトランザクションは存続します。トランザクション・マネージャはrollbackまたはcommitを呼び出し、トランザクションを完了する必要があります。

Javaクライアントの構成プロパティ

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

port (通常は4100)


Sybase jConnect 5.5および6.0/XAの確認済みの問題

次に、既知の問題とOracleの回避策を示します。

表10-4 Sybase jConnect 5.5および6.0の既知の問題と回避策

説明 Sybaseのバグ コメント/WebLogic Serverの回避策

setAutoCommit (true)を呼び出すと次の例外がスローされます。

java.sql.SQLException: JZ0S3: The inherited method setAutoCommit(true)
cannot be used in this subclass. 

10726192

回避策はありません。jConnect 6.0でベンダーにより修正済みです。

分散トランザクションでドライバを使用する場合、XAResource.end(TMSUSPEND)に続けてXAResource.end(TMSUCCESS)を呼び出すと、XAER_RMERRになります。

10727617

WebLogic Serverでは、このバグに対する内部的な回避策を提供しています。

データ・ソースの接続プールのプロパティをXAEndOnlyOnce="true"に設定します。

ベンダーによる修正がリクエストされています。


その他のXAドライバの使い方

その他のXA準拠JDBCドライバを使用するためには、ドライバ・クラス・ライブラリのパスをCLASSPATHで指定した上で、ベンダーの説明に従って操作を行う必要があります。