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となります。
分散トランザクションに関連するクラスを次の表に示します。
表17-12 分散トランザクションに関連するクラス
クラス |
概 要 |
javax.sql.DataSource |
- トランザクション連携機能が提供します。
- DB接続のとき,アプリケーションとのインタフェースとして使用します。
- 通常,TMとの連携と,接続プールの制御は,このクラスで行われます。
- 通常,JNDIに登録して使用します。
- JDBCドライバが提供するDataSourceクラスとは別のものです。
|
javax.sql.XADataSource |
- JDBCドライバが提供します。
- DB接続に必要な,接続情報設定/取得用のメソッドを使用できます。
- 通常,アプリケーションから直接使用されることはなく,トランザクション連携機能によって使用されます。
- 通常,JNDIに登録して使用します。
- トランザクション連携機能は,このクラスのオブジェクトからXAConnectionオブジェクトを取得します。
|
javax.sql.XAConnection |
- JDBCドライバが提供します。
- PooledConnectionクラスのサブクラスです。つまり,接続プールに関連するメソッドをすべて引き継ぎます。
- 通常,アプリケーションから直接使用されることはなく,トランザクション連携機能によって使用されます。
- トランザクション連携機能は,このクラスのオブジェクトをプールの対象とします。
- トランザクション連携機能は,このクラスのオブジェクトからアプリケーションが使用する,Connectionオブジェクトを取得します。
|
javax.sql.ConnectionEventListener |
- トランザクション連携機能が提供します。
- トランザクション連携機能は,接続の切断/SQLエラーなどをこのクラスのオブジェクトを通して検知することで,接続プールの契機とします。
|
javax.transaction.xa.XAResource |
- JDBCドライバが提供します。
- TMで使用されるXA関連のメソッドを使用できます。
|
javax.transaction.xa.Xid |
- JDBCドライバ及びTMが提供します。
- XAResourceクラスのメソッドの引数/戻り値として使用します。
|
表17-12のクラスのインタフェース定義はJDKに標準で含まれていないため,トランザクション連携機能の開発の際には,JavaSoftのWebサイトから入手する必要があります。
表17-12のJDBCドライバが提供するクラスの,パッケージ名称とクラス名称を次に示します。
- パッケージ名称:JP.co.Hitachi.soft.HiRDB.JDBC
- XADataSourceクラス名称:JdbhXADataSource
- XAConnectionクラス名称:JdbhXAConnection
- XAResourceクラス名称:JdbhXAResource
- Xidクラス名称:JdbhXid
なお,JDBCドライバが提供するXADataSourceクラスの接続情報の設定は,JDBCドライバが提供するDataSourceクラスの接続情報の設定と同じです。
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.