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

WebLogic jDriver for Oracle のコンフィグレーションと使い方 (非推奨)

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

分散トランザクションでの WebLogic jDriver for Oracle/XA の使い方

注意 : WebLogic jDriver for Oracle は非推奨となりました。将来のリリースでは削除されます。BEA では、BEA WebLogic Type 4 JDBC Oracle ドライバの使用をお勧めします。詳細については、『WebLogic Type 4 JDBC ドライバ ガイド』を参照してください。

以下の節では、WebLogic jDriver for Oracle/XA を使用し、BEA WebLogic Server 環境で動作する EJB および RMI アプリケーションにトランザクションを統合する方法について説明します。

 


WebLogic jDriver for Oracle の XA モードと非 XA モードの違い

WebLogic jDriver for Oracle は、分散トランザクションについて JDBC 2.0 オプション パッケージ API を完全サポートしています。分散トランザクション (XA) モードでこのドライバを使用するアプリケーションは、以下の例外を除いて、ローカル トランザクション (非 XA) モードの場合と同じように JDBC 2.0 コア API を使用できます。

最後の 2 つの理由が違うのは、WebLogic jDriver for Oracle/XA が分散トランザクションを構成する場合、分散トランザクションの境界を決めたり、調整したりするのが外部のトランザクション マネージャだからです。

詳細については、「JDBC 2.0 Standard Extension API spec」(バージョン 1.0、98/12/7 付、Section 7.1 の最後の 2 パラグラフ) を参照してください。

WebLogic XA jDriver での接続の動作

WebLogic XA jDriver for Oracle は内部的に Oracle C/XA スイッチを使用するため、xa_openxa_start は、SQL 呼び出しを行う各スレッド上で呼び出される必要があります。また、xa_open を呼び出すと、新しい物理的な XA データベース接続が作成されます。これらの制限に対処するために、WebLogic XA jDriver for Oracle では、スレッドが接続を使用するまでは物理的なデータベース接続を作成しません。スレッドが接続を使用するときに、XA jDriver は xa_open (および xa_start) を呼び出して接続を作成し、その接続をスレッドに関連付けます。データベース接続が作成された後も、接続はスレッドにそのまま関連付けられており、ドライバは xa_close を呼び出しません。以降にスレッドでデータベース接続が必要となると、スレッドは関連付けられている同じデータベース接続を使用します。ただし、これは JDBC 接続プールから接続を取得して返しているように見えます。

このドライバの動作によって、JDBC 接続プールの動作も若干変わります。

注意 : これらの動作の変更点は、物理的なデータベース接続の作成に WebLogic XA jDriver を使用する JDBC 接続プールにのみ適用されます。他の XA ドライバを使用する接続プールには適用されません。

 


JDBC XA および非 XA リソースのコンフィグレーション

Administration Console を使用して、以下の節で説明するように JDBC リソースをコンフィグレーションします。

JDBC/XA リソース

XA 対応 JDBC ドライバを分散トランザクションに参加させるには、以下のように JDBC 接続プールをコンフィグレーションします。

手順や属性の定義については、[JDBC 接続プール] タブに関する 「Administration Console オンライン ヘルプ」を参照してください。

WebLogic jDriver for Oracle/XA のデータ ソース プロパティ

表 4-1 に、WebLogic jDriver for Oracle でサポートされているデータ ソース プロパティを示します。「JDBC 2.0」カラムは、特定のデータ ソース プロパティが JDBC 2.0 の標準データ ソース プロパティか (S)、または JDBC に対する WebLogic Server の拡張か (E) を示します。

「省略可能」カラムは、特定のデータ ソース プロパティが省略可能かどうかを示します。「はい*」マークが付いたプロパティは、表 4-1 に示された、Oracle の xa_open 文字列 (openString プロパティの値) の対応するフィールドにマップされます。それらのプロパティが指定されない場合、デフォルト値は openString プロパティから取得されます。それらのプロパティが指定される場合、その値は openString プロパティで指定された値と一致する必要があります。プロパティが一致しない場合、XA 接続を確立しようとすると SQLException が送出されます。

「いいえ*」マークが付いた必須プロパティも、Oracle の xa_open 文字列の対応するフィールドにマップされます。これらのプロパティは、Oracle の xa_open 文字列を指定するときに指定します。プロパティが指定されない場合や、指定されていても一致しない場合は、XA 接続を確立しようとすると SQLException が送出されます。

「**」マークが付いたプロパティ名はサポートされていますが、WebLogic Server では使用されません。

表 4-1 WebLogic jDriver for Oracle/XA のデータ ソース プロパティ

プロパティ名

説明

JDBC 2.0
標準 (S)/拡張 (E)

省略可能

デフォルト値

databaseName**

String

サーバ上の特定のデータベース名。

S

はい

なし

dataSourceName

String

データ ソース名。基になる XADataSource に名前を付ける場合に使用される。

S

はい

接続プール名

description

String

このデータ ソースの説明。

S

はい

なし

networkProtocol**

String

サーバと通信する場合に使用されるネットワーク プロトコル。

S

はい

なし

password

String

データベースのパスワード。

S

いいえ*

なし

portNumber**

Int

サーバがリクエストをリスンしているポート番号。

S

はい

なし

roleName**

String

初期 SQL ロール名。

S

はい

なし

serverName

String

データベース サーバ名。

S

はい*

なし

user

String

ユーザのアカウント名。

S

いいえ*

なし

openString

String

Oracle の XA オープン文字列。

E

はい

なし

oracleXATrace

String

XA トレース出力が有効かどうかを示す。有効 (true) の場合、xa_poolnamedate.trc 形式の名前を持つファイルがサーバの起動ディレクトリに配置される。

E

はい

false

表 4-2 に、Oracle の xa_open 文字列フィールドとデータ ソース プロパティの間のマッピングを示します。

表 4-2 xa_open 文字列名と JDBC データ ソース プロパティとのマッピング

Oracle xa_open 文字列フィールド名

JDBC 2.0 データ ソース プロパティ

省略可能

acc

user、password

いいえ

sqlnet

ServerName


注意 : Oracle の xa_open 文字列で「Threads=true」と指定する必要があります。

Oracle の xa_open 文字列フィールドの詳細については、Oracle のドキュメントを参照してください。

XA 非対応の JDBC リソース

XA 非対応の JDBC リソースをサポートするには、JDBC Tx データ ソース ([グローバル トランザクションを受け付ける] を選択したデータ ソース) をコンフィグレーションするときに、enableTwoPhaseCommit データベース プロパティ (Administration Console の [非ドライバ用に 2 フェーズ コミットをエミュレート]) を選択します。このプロパティの詳細については、Administration Console オンライン ヘルプの「分散トランザクション用非 XA JDBC ドライバのコンフィグレーション」を参照してください。

 


WebLogic jDriver for Oracle XA の制限

XA モードの WebLogic jDriver for Oracle は以下の動作をサポートしていません。

 


分散トランザクションの実装

ここでは以下について説明します。

パッケージのインポート

コード リスト 4-1 は、アプリケーションがインポートするパッケージを示します。特に以下の点に注意してください。

コード リスト 4-1 必要なパッケージのインポート

import java.sql.*;
import javax.sql.*;
import javax.naming.*;

JNDI を介したデータ ソースの検索

コード リスト 4-2 は、JNDI を介したデータ ソースの検索方法を示します。

コード リスト 4-2 JNDI を介したデータ ソースの検索

static DataSource pool;
...
public void get_connpool(String pool_name)
throws Exception
{
try {
javax.naming.Context ctx = new InitialContext();
pool = (DataSource)ctx.lookup("jdbc/" + pool_name);
}
catch (javax.naming.NamingException ex){
TP.userlog("Couldn't obtain JDBC connection pool: " + pool_name);
throw ex;
}
}
}

分散トランザクションの実行

コード リスト 4-3 は、2 つのデータベース接続を使用し、セッション Bean 内のビジネス メソッドとして実装された分散トランザクションを示します。

コード リスト 4-3 分散トランザクションの実行

public class myEJB implements SessionBean {
EJBContext ejbContext;

public void myMethod(...) {
javax,transaction.UserTransaction usertx;
javax.sql.DataSource data1;
javax.sql.DataSource data2;
java.sql.Connection conn1;
java.sql.Connection conn2;
java.sql.Statement stat1;
java.sql.Statement stat2;

InitialContext initCtx = new InitialContext();

//
// ユーザ トランザクション オブジェクトを初期化する
//
usertx = ejbContext.getUserTransaction();

// 新規のユーザ トランザクションを開始する
          usertx.begin();

// 最初のデータベースとの接続を確立し、
          // トランザクションの処理を準備する
          data1 = (javax.sql.DataSource)
initCtx.lookup("java:comp/env/jdbc/DataBase1");
conn1 = data1.getConnection();

stat1 = conn1.getStatement();

// 2 番目のデータベースとの接続を確立し、
          // トランザクションの処理を準備する
          data2 = (javax.sql.DataSource)
initCtx.lookup("java:comp/env/jdbc/DataBase2");
conn2 = data1.getConnection();

stat2 = conn2.getStatement();

// conn1 および conn2 の両方を更新する。 EJB コンテナは
          // 関連するリソースを自動的に取得する
          stat1.executeQuery(...);
stat1.executeUpdate(...);
stat2.executeQuery(...);
stat2.executeUpdate(...);
stat1.executeUpdate(...);
stat2.executeUpdate(...);

// トランザクションをコミットする
          // 関連するデータベースに変更を適用する
          usertx.commit();

          // すべての接続と文を解放する
          stat1.close();
stat2.close();
conn1.close();
conn2.close();
}
...
}

 

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