ナビゲーションをスキップ

WebLogic JTA プログラマーズ ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

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

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

 


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

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

サードパーティ XA ドライバの表

次の表に、サード パーティ JDBC/XA ドライバを WebLogic Server で使用する場合の確認済みの機能について示します。

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

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

説明

Oracle Thin Driver XA

Oracle Thin/XA Driver の使い方」を参照。

IBM DB2 Type 2

IBM DB2 Type 2 XA JDBC Driver の使い方」を参照。

Sybase jConnect/XA

  • バージョン 5.5

  • Adaptive Server Enterprise 12.0

Sybase jConnect 5.5/XA Driver の使い方」を参照。



 

 


サードパーティ ドライバのコンフィグレーションとパフォーマンス要件

次に、WebLogic Server で特定のサードパーティ XA ドライバを使用するための要件とガイドラインを示します。

Oracle Thin/XA Driver の使い方

WebLogic Server にバンドルされた Oracle Thin Driver 10g (10.1.0.2.0) は事前にコンフィグレーションされ、そのまま使用できる状態になっています。ドライバを更新する場合や異なるバージョンを使用する場合は、『WebLogic JDBC プログラマーズ ガイド』の「Oracle Thin Driver の使い方」を参照してください。

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

Oracle Thin/XA Driver のソフトウェア要件

Oracle Thin/XA Driver のソフトウェア要件は次のとおりです。

Oracle Thin Driver に関する確認済みの問題

表 7-2 に、Oracle Thin Driver の確認済みの問題と BEA の回避策を示します。これらの問題に関する最新の情報については、Oracle の Web サイトを参照してください。

表 7-2 Oracle Thin Driver の確認済みの問題と回避策

説明

Oracle のバグ

説明/WebLogic Server の回避策

WebLogic Server の再起動後、Oracle Thin Driver の 9.2.0.3 以前のバージョンを使用すると、XAER_PROTO エラーまたは断続的なハングが発生する場合がある。

2717235

この状況は、サーバの再起動時に、WebLogic Server が XA.recover() を呼び出して保留中のトランザクションを回復するために発生する。Oracle Thin Driver の 9.2.0.3 以前のバージョンでは、Oracle DBMS はローカル トランザクションを開いてトランザクションの回復作業を完了するものの、そのローカル トランザクションを閉じない。トランザクションの回復に使用された接続が接続プールに戻され、アプリケーションによって再利用されても、ローカル トランザクションは依然として存在する。この接続の最初の操作で、XAER_PROTO エラーが送出される (TestConnsOnReservetrue に設定されている場合、接続テストは接続の最初の操作である)。WebLogic Server は、リソース接続の登録を解除し、リソースに対するトランザクションがすべて完了するまで一定時間待機する。これがハング状態に見える。

Oracle では、このバグに対するパッチを提供している。このパッチは、Oracle Metalink Web サイトからダウンロードできる。Oracle バグ番号 2717235 を参照。

この問題は、バージョン 9.2.0.4 および 10g では修正されている。

Oracle Thin Driver バージョン 9.2.0.1 および 9.2.0.2 では、Long raw も含むテーブルの BLOB を処理できない。テーブルから BLOB を取り出し、blob.length() を呼び出すと、SQL プロトコル違反になる。

2696397

この問題は、バージョン 9.2.0.3 および 10g では修正されている。

Oracle Thin Driver 9.2.0.1 および 9.2.0.2 の使用中に、データ変換を伴う setNull とともに addBatch を実行すると、ヌル ポインタ例外になる。たとえば、次の場合、Oracle Thin Driver 9.2.0 では例外になる。

    1. pstmt.setNull(1,
    java.sql.Types.REAL)

    2. pstmt.addBatch()

    3. pstmt.setNull(1,
    java.sql.Types.VARCHAR)


この問題は、バージョン 9.2.0.3 および 10g では修正されている。

Oracle Thin Driver バージョン 9.2.0.1 および 9.2.0.2 では、Long も含むテーブルの CLOB を処理できない。テーブルから CLOB を取り出し、clob.length() を呼び出すと、SQL プロトコル違反になる。


回避策 : このシナリオでは、clob.length() を呼び出す前に LONG カラムを読み込むことができる。

この問題は、バージョン 9.2.0.3 および 10g では修正されている。

Oracle Thin Driver バージョン 9.2.0.1 および 9.2.0.2.0 では、「alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'」を使用してデフォルトの Oracle タイムスタンプ形式を変更できない。以前のバージョンでは変更可能。

2632931

TAR 番号 2677656.995

9.2.0.2.1 で修正されている。

Oracle では、このバグに対するパッチを提供している。このパッチは、Oracle Metalink Web サイトからダウンロードできる。Oracle バグ番号 2632931 を参照。

ORA-01453 -「SET TRANSACTION をトランザクションの最初の文にする必要があります」


Oracle Thin/XA Driver を使用する場合には、トランザクションのトランザクション アイソレーション レベルを変更できない。トランザクションは、データベースに対して設定されているデフォルトのトランザクション アイソレーションを使用する。

ORA-01002 -「フェッチ順序が無効です」例外。XAResource.end(TMSUSPEND) 結果および XAResource.start(TMRESUME) 結果の後で結果セットを反復すると ORA-01002 になる。

この例外は、Oracle Thin Driver を使用している WebLogic Server のプールされた接続を使用して、外部クライアントが結果セットを取得する場合にも発生する。結果セットがクライアントに送信されると、現在のトランザクションがサスペンドする。

回避策として、文のフェッチ サイズを結果セットのサイズ以上に設定する。つまり、この回避策を使用しない限り、Oracle Thin Driver をクライアント サイドでは使用できない。または、メソッド呼び出しの間、Bean では結果セットを開いておくことができない。

これは、修正される予定のない Oracle の制限である。

グローバル トランザクションのない更新がサポートされない。更新時にグローバル トランザクションがない場合、更新を実行するためにローカル トランザクションが暗黙的に開始され、グローバル トランザクションと同じ XA 接続が再利用されるために XAER_RMERR になる。

さらに、アプリケーションがローカル トランザクションのコミットを試みる (自動コミットを true に設定する、または Connection.commit() を明示的に呼び出す) と、Oracle XA Driver が「SQLException: Use explicit XA call」を返す。

アプリケーションで XA ドライバを使用して更新を行う場合は、有効なグローバル トランザクション コンテキストが存在していなければならない。つまり、Bean メソッドには、トランザクション属性として Required、RequiresNew、または Mandatory を持たせる必要がある。


 

Oracle Thin/XA Driver の環境の設定

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

『WebLogic JDBC プログラマーズ ガイド』の「Oracle Thin Driver の使い方」を参照してください。

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

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

  1. システム ユーザとして sqlplus にログオンします (sqlplus sys/CHANGE_ON_INSTALL@<DATABASE ALIAS NAME> など)。
  2. 次のコマンドを実行します。@xaview.sql
  3. 以下のパーミッションを与えます。

上の手順をデータベース サーバ上で実行しない場合、通常の XA データベース クエリと更新は正常に動作できます。ただし、クラッシュ後の再起動に続き、WebLogic Server トランザクション マネージャが回復を行うときに、Oracle リソースの回復は XAER_RMERR になり失敗します。クラッシュの回復は、XA リソースに対する標準的な処理です。

Oracle Thin/XA Driver のコンフィグレーション プロパティ

次の表に、接続プールのコンフィグレーションのためのサンプル コードを示します。

Oracle Thin/XA Driver : 接続プール コンフィグレーション

プロパティ名

プロパティ値

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 のコンフィグレーションのためのサンプル属性を示します。Administration Console で TxDataSource を作成する場合は、データ ソースの作成時に [グローバル トランザクションを受け付ける] を選択してください。

表 7-3 Oracle Thin/XA Driver : TxDataSource のコンフィグレーション

プロパティ名

プロパティ値

Name

jtaXADS

Targets

myserver,server1

JNDIName

jtaXADS

PoolName

jtaXAPool


 

IBM DB2 Type 2 XA JDBC Driver の使い方

以下の節では、WebLogic Server で Type2 DB2 7.2/XA Driver を使用するために環境を設定する方法について説明します。

インストール手順と接続プールのコンフィグレーション手順については、『WebLogic JDBC プログラマーズ ガイド』の「IBM DB2 Type 2 JDBC Driver のインストールと使い方」(../jdbc/thirdparty.html#db2) を参照してください。

DB2 7.2/XA Driver の環境の設定

次のように環境を設定します。

ここで、<db2> は DB2 サーバがインストールされているディレクトリを表します。

XAResource として DB2 を使用する場合の制限

  1. 複数の接続プールを持つコンフィグレーションの場合、各接続プールは個別のデータベース インスタンスを持つ必要があります。
  2. トランザクションは、サスペンドされたトランザクションにすでに関連付けられているリソースでは開始できません。この場合、javax.transaction.InvalidTransactionException (非アクティブなトランザクションを再開しようとした) が送出されます。サスペンドと再開の間に、中間トランザクションが、サスペンドされたトランザクションで使用されたものと同じリソースを使用すると、javax.transaction.invalidtransation 例外が送出されます。異なるリソースが中間トランザクションの内部で使用される場合は、正常に動作します。

Sybase jConnect 5.5/XA Driver の使い方

Sybase jConnect 5.5/XA Driver を使用する場合の重要なコンフィグレーション情報とパフォーマンス問題を以下の節で示します。

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 トランザクションの結果として OutOfMemoryError が検出される。


最新の Sybase jConnect Driver にアップグレードする。


 

XA をサポートするための Sybase サーバの設定

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

   $ SYBASE_INSTALL\xa_config

トランザクションを実行するときのデッドロックを防ぐために、デフォルトで低レベル ロックを有効にします。

注意 : jConnect.jar および jconn2.jar ファイルは、2 つとも WL_HOME\server\lib フォルダに含まれ、マニフェスト ファイル weblogic.jar で参照されます。WebLogic Server を起動する時に、ドライバが自動的にロードされ、WebLogic Server で使用する準備が整います。これのドライバを WebLogic ユーティリティまたは他のアプリケーションで使用するには、これらのファイルのパスを CLASSPATH で指定します。

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 はトランザクションのタイムアウトより大きい値に設定する必要があります。トランザクションのタイムアウトの設定については、Administration Console オンライン ヘルプの「JTA」を参照してください。

dtm detach timeout period の詳細については、Sybase のドキュメントを参照してください。

Sybase Adaptive Server でのトランザクションの動作

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

Sybase jConnect 5.5/XA Driver の接続プール

次の表に、接続プールのコンフィグレーションのためのサンプル コードを示します。

表 7-5 Sybase jConnect 5.5/XA Driver : サンプル接続プール コンフィグレーション

プロパティ名

プロパティ値

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 名を参照します。

次の表に、TxDataSource のコンフィグレーションのためのサンプル コードを示します。

表 7-6 Sybase jConnect 5.5/XA Driver : TxDataSource のコンフィグレーション

プロパティ名

プロパティ値

Name

jtaXADS

Targets

server1

JNDIName

jtaXADS

PoolName

jtaXAPool


 

Java クライアントのコンフィグレーション プロパティ

Java クライアントを実行する場合の以下のコンフィグレーション プロパティを設定します。

表 7-7 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)


 

その他のサードパーティ XA ドライバ

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

 

フッタのナビゲーションのスキップ  ページの先頭 前 次