5 WebLogic 多層 JDBC ドライバの使い方
トランザクションが開始されると、同じ接続プールから接続を取得する実行ス レッドのすべてのデータベース操作は、そのプールの同じ接続を共有することに なっています。これらの操作は、エンタープライズ JavaBean(EJB)や Java
Messaging Service(JMS)のようなサービスを通じて、または標準 JDBC 呼び出
しを使用して直接 SQL を送信することにより行うことができます。デフォルト では、これらすべての操作は同じ接続を共有し、同じトランザクションに参加し ます。トランザクションがコミットまたはロールバックされると、接続はプール に戻されます。Java クライアントは JTS ドライバ自身を登録しない場合もありますが、Remote Method Invocation (RMI)を介してトランザクションに参加することができま
す。あるクライアントの 1 つのスレッド内でトランザクションを開始し、そのク ライアントにリモート RMI オブジェクトを呼び出させることができます。リ モート オブジェクトによって実行されるデータベース操作は、そのクライアン ト上で開始されたトランザクションの一部分になります。そのリモート オブ ジェクトがそれを呼び出したクライアントに戻されたら、そのトランザクション をコミットまたはロールバックできます。リモート オブジェクトによって実行 されるデータベース操作は、すべて同一の接続プールを使用しなければならず、同一のトランザクションの一部にならなければなりません。
XA 非対応の JDBC ドライバを備えたトランザクション データ ソースに対して
[2 フェーズ コミットを有効化 ] (
enableTwoPhaseCommit = true) を選択すると、
WebLogic Server では内部で JTS ドライバを使用して、XA 非対応のリソースが 2 フェーズ コミット (2PC) をエミュレートしてグローバル トランザクションに
参加できるようにします。XA 非対応のリソースをグローバル トランザクション に参加させることができる仕組みと JTS ドライバの使い方の詳細については、『WebLogic Server 管理者ガイド』
の「分散トランザクション用の XA 非対応
JDBC ドライバのコンフィグレーション」を参照してください。WebLogic JTS ドライバの使い方
1.
以下のクラスをインポートします。import javax.transaction.UserTransaction;
import java.sql.*;
import javax.naming.*;
import java.util.*;
import weblogic.jndi.*;
2.
UserTransactionクラスを使用してトランザクションを確立します。このク
ラスは、Java Naming and Directory Service (JNDI)でルックアップされま す。UserTransactionクラスは、現在の実行スレッド上のトランザクション
を制御します。このクラスはトランザクション自身を表さないことに注意し てください。このトランザクションの実際のコンテキストは、現在の実行ス レッドに関連付けられています。Context ctx = null;
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
// WebLogic Server の パラメータ
// 環境に合わせて適切なホスト名、ポート番号、
// ユーザ名、およびパスワードに置き換える
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
env.put(Context.SECURITY_PRINCIPAL, "Fred");
env.put(Context.SECURITY_CREDENTIALS, "secret");
ctx = new InitialContext(env);
UserTransaction tx = (UserTransaction)
ctx.lookup("javax.transaction.UserTransaction");
3.
現在のスレッドのトランザクションを開始します。tx.begin();
4. JTS ドライバをロードします。
Driver myDriver = (Driver)
Class.forName("weblogic.jdbc.jts.Driver").newInstance();
5.
接続プールから接続を取得します。Properties props = new Properties();
props.put("connectionPoolID", "myConnectionPool");
conn = myDriver.connect("jdbc:weblogic:jts", props);
5 WebLogic 多層 JDBC ドライバの使い方
6.
データベース操作を実行します。これらの操作は、データベース接続を使用 する任意のサービスによって行うことができます。こうしたサービスには、EJB、JMS、標準 JDBC 文が含まれます。これらの操作が手順 3 で開始した
トランザクションと同じ接続プールにアクセスするために JTS ドライバを使 用する場合、それらはそのトランザクションに参加することになります。JTS ドライバを使用した追加データベース操作が、手順 5 で指定した接続
プールとは違う接続プールを使用する場合、そのトランザクションをコミッ トまたはロールバックしようとすると例外が発生します。7.
接続オブジェクトをクローズします。接続をクローズしても、それでトラン ザクションがコミットされるわけでも、その接続がプールに戻されるわけで もないことに注意してください。conn.close();
8.
他のデータベース操作を実行します。これらの操作が同じ接続プールへの接 続によって行われるのであれば、それらの操作はプールから同じ接続を使用 し、このスレッド内の他のすべての操作と同じ UserTransactionの一部と
なります。9.
そのトランザクションをコミットまたはロールバックすることにより、トラ ンザクションを完了します。JTS ドライバは、現在のスレッドに存在するす べての接続オブジェクトのすべてのトランザクションをコミットし、接続を プールに返します。tx.commit();
// または tx.rollback();