ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server JTA プログラマーズ ガイド
11g リリース 1 (10.3.1)
B55540-01
 

目次
目次

戻る
戻る
 
次へ
次へ
 

10 WebLogic Server でのサード パーティ JDBC XA ドライバの使い方

この章では次の内容について説明します。

サード パーティ XA ドライバの概要

この節では、分散トランザクションにおける WebLogic Server でのサード パーティ 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 Fusion Middleware Oracle WebLogic Server JDBC プログラマーズ ガイド』の「Oracle 拡張機能と Oracle Thin Driver の使用」を参照してください。

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 サーバ (非 XA での使用には制限は適用されない)。

Oracle Thin/XA Driver の環境の設定

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

WebLogic Server のコンフィグレーション

『Oracle Fusion Middleware Oracle WebLogic Server JDBC プログラマーズ ガイド』の「Oracle 拡張機能と Oracle Thin Driver の使用」を参照してください。

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 (Windows では通常 1521) :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 で指定した上で、ベンダの説明に従って操作を行う必要があります。