16.4.3 分散トランザクション
JDBC2.0 Optional Packageでは,接続プール機能の拡張として,X/OpenのXA規格を基にしたトランザクションマネジャ(TM)との連携による,分散トランザクションが規定されています。分散トランザクションの概要を次に示します。
-
既存のアプリケーションには,ほとんど影響を与えません。ただし,「直接commitしてはいけません」などの制限があります。また,接続プールの場合と同様に,DB接続はDriverManagerを使用する方法ではなく,JDBC2.0 Optional Packageで導入されたDataSourceとJNDIを使用する方法で行っていることが前提となります。
-
TMとの連携をするトランザクション連携機能は,接続プールの場合と同様に,JDBC規格の機能範囲外です。
-
通常,トランザクション連携機能は,接続プール機能の拡張として実装され,TMとのインタフェースとして,TMが提供するJTAやJTSを使用します。なお,JTA規格1.0に準拠した動作は保証しません。
-
トランザクション連携機能では,接続プールの場合と同様に,アプリケーションとのインタフェースとしてDataSourceクラスを使用できます。このDataSourceクラスは,JDBCドライバが提供するDataSourceクラスとは別のものです。
-
JDBCドライバでは,トランザクション連携機能とのインタフェースとして,XADataSourceクラスとXAConnectionクラスを使用できます。また,TMとのインタフェースとしてXAResourceクラスを使用できます。
-
JDBCドライバが提供するXADataSourceクラスは,JDBCドライバが提供するDataSourceクラスと同様に,接続情報の設定/取得用のメソッドを使用できます。
接続プールの場合と同様に,アプリケーションで使用するConnectionオブジェクトはXAConnectionクラスが生成します。ただし,PooledConnectionクラスやJDBCドライバが提供する,DataSourceクラスが生成するConnectionオブジェクトと比べて,次の点が異なります。
-
Connectionクラスのcommitメソッド及びrollbackメソッドの呼び出しは,SQLExceptionとなります。つまり,アプリケーションから直接トランザクションの決着はできません。
-
AutoCommitのデフォルトモードはOFFです。
-
AutoCommitのモードをONにするConnectionクラスのsetAutoCommit(true)メソッドの発行は,SQLExceptionとなります。
分散トランザクションに関連するクラスを次の表に示します。
クラス |
概 要 |
---|---|
javax.sql.DataSource |
|
javax.sql.XADataSource |
|
javax.sql.XAConnection |
|
javax.sql.ConnectionEventListener |
|
javax.transaction.xa.XAResource |
|
javax.transaction.xa.Xid |
|
表「分散トランザクションに関連するクラス」のクラスのインタフェース定義はJDKに標準で含まれていないため,トランザクション連携機能の開発の際には,JavaSoftのWebサイトから入手する必要があります。
表「分散トランザクションに関連するクラス」のJDBCドライバが提供するクラスの,パッケージ名称とクラス名称を次に示します。
パッケージ名称:JP.co.Hitachi.soft.HiRDB.JDBC
XADataSourceクラス名称:JdbhXADataSource
XAConnectionクラス名称:JdbhXAConnection
XAResourceクラス名称:JdbhXAResource
Xidクラス名称:JdbhXid
なお,JDBCドライバが提供するXADataSourceクラスの接続情報の設定は,JDBCドライバが提供するDataSourceクラスの接続情報の設定と同じです。