Cosminexus アプリケーション開発ガイド
![[目次]](FIGURE/CONTENT.GIF)
![[用語]](FIGURE/GLOSS.GIF)
![[索引]](FIGURE/INDEX.GIF)
![[前へ]](FIGURE/FRONT.GIF)
分散トランザクション機能とは,Sun Microsystemsの提唱するJava Transaction API(JTA)規格を基に,トランザクションマネージャと連携する,接続プール機能の拡張機能です。
分散トランザクション機能は,XADataSourceクラスとJNDIを使用してデータベースと接続した場合だけ使用できます。
分散トランザクション機能の概要について説明します。
- <この項の構成>
- (1) 概要
- (2) 関連するクラス
- (3) 注意事項
JTSおよびJTAとの連携によって,Sun Microsystemsの提唱するJava Transaction API(JTA)規格に沿った,分散トランザクションを構築できます。
- システム構築時に,トランザクション連携機能を任意に選択できます(ユーザが作成する,APServerベンダ提供のものを使用する,またはJDBCベンダが提供するものを使用する)。
- トランザクション連携機能は,接続プールの拡張機能として,トランザクションマネージャが提供する,JTAやJTSを使用します。
- トランザクション連携機能では,アプリケーションとのインタフェースとして,DataSourceクラスを提供します。
- JDBC2.0拡張機能では,トランザクション連携機能とのインタフェースとして,XADataSourceクラスとXAConnectionクラスを提供します。また,トランザクションマネージャとのインタフェースとして,XAResourceクラスを提供します。
- XADataSourceクラスは,JDBC2.0拡張機能が提供するDataSourceクラスと同様に,接続情報の設定および取得用のメソッドを提供します。
接続プールの場合と同様に,アプリケーションが使用するConnectionオブジェクトはXAConnectionクラスが生成しますが,PooledConnectionクラスやJDBC2.0拡張機能が提供するDataSourceクラスが生成するConnectionオブジェクトと比べて,次の点が異なります。
- 接続情報にXALocalCommitMode(true)を設定していない場合には,XADataSourceクラス使用時,AutoCommitのモードはOFFになります。また,AutoCommitのモードをONにしたり(ConnectionクラスのsetAutoCommit(true)メソッドの発行),Connectionクラスのcommitメソッド,またはrollbackメソッドを実行したりすると,SQLExceptionとなります。ただし,XALocalCommitMode(true)をプロパティに設定している場合だけAutoCommitのモードはONとなります。
- 一つのXAResourceに対して複数のConnectionクラスを生成してもトランザクションは一つになります。XAResource,Connectionは一対一で使用するようにしてください。トランザクションがローカルトランザクション※1の場合,ConnectionクラスのsetAutoCommit(true)メソッド,commitメソッド,およびrollbackメソッドを呼び出せます。同じXAResourceを使用するトランザクションがグローバルトランザクション※2を開始すると,自動的にAutoCommitのモードはOFFになります。再び,トランザクションがローカルトランザクションに移行すると,開始前のAutoCommitのモードに変更されます。複数のConnectionを使用して,トランザクションがローカルトランザクションのときにsetAutoCommitメソッドでAutoCommitのモードを変更する場合は,すべてのConnectionクラスのオブジェクトに対してそれぞれsetAutoCommitメソッドを呼び出してAutoCommitのモードを統一させる必要があります。現在のトランザクションがローカルトランザクションで,AutoCommitのモードがOFFの状態で新たにConnectionを生成した場合,新しいConnectionクラスのオブジェクトに対してsetAutoCommit(false)を実行してください。
- 注※1
- ローカルトランザクションとは,XAResourceクラスのstart実行前,またはXAResourceクラスのend実行後の状態にあるトランザクションのことです。
- 注※2
- グローバルトランザクションとは,XAResourceクラスのstart実行後,またはXAResourceクラスのendを実行するまでの状態にあるトランザクションのことで,トランザクションマネージャがトランザクション制御を行っている状態を指します。
- 次の状態のとき,Connectionクラスのcloseメソッドを実行しても,接続しているデータベースによってトランザクションが決着されないことがあります。
- 接続情報にXALocalCommitMode(true)を設定している。
- AutoCommitのモードをOFFにしている。
- ローカルトランザクション内でSQLを実行し,Connectionクラスのcommitメソッド,またはrollbackメソッドを実行しない。
トランザクションを決着させるには,Connectionクラスのcloseメソッドを実行する前に,明示的にConnectionクラスのcommitメソッド,またはrollbackメソッドを実行する必要があります。
- HiRDBの配列更新機能を使用するには,setXALocalCommitMode(true),およびsetBlockUpdate(true)に設定してHiRDBに接続後,AutoCommit(false)を指定する必要があります。HiRDBにsetXALocalCommitMode(true)を設定して接続し,HiRDBの配列更新機能を使用する例を次に示します。
なお,HiRDBの配列更新機能については,「22.2.2 バッチ更新」を参照してください。
XADataSource xads = new XADataSource();
xads.setDatabaseName("HIRDB");
xads.setXALocalCommitMode(true);
・
・
Connection con = xaconnection.getConnection();
String sql = "INSERT INTO SAMPLE VALUES(?)";
PreparedStatement pst = con.prepareStatement(sql);
con.setAutoCommit(false);
pst.setInt(1,10);
pst.addBatch();
pst.setInt(1,20);
pst.addBatch();
pst.executeBatch();
con.commit();
|
- Cosminexus DABroker Libraryは,SQLの前処理を複数のCommit,Rollbackにわたって保持します。
この機能をXA環境下で使用できるデータベースは,HiRDBのバージョンが07-01以降です。また,SQLの前処理の保持機能が使用できるのは,グローバルトランザクション,およびローカルトランザクションを混在せずに使用している場合だけです。
ローカルトランザクションとグローバルトランザクションを混在させて使用すると,ローカルトランザクションSQLの前処理の保持機能は使用できません。
XA環境下でローカルトランザクションとグローバルトランザクションが混在したJavaUPの場合の前処理保持状態を次に示します。
![[図データ]](FIGURE/ZU220300.GIF)
(2) 関連するクラス
分散トランザクション機能に関連するクラスを次の表に示します。
表22-13 分散トランザクションに関連するクラス
| クラス |
概要 |
javax.sql.
ConnectionEventListener |
- トランザクション連携機能が提供
- トランザクション連携機能で,接続の切断,SQLエラーなどをこのクラスのオブジェクトから検知※1
|
| javax.sql.DataSource |
- トランザクション連携機能が提供
- データベース接続時のアプリケーションとのインタフェース
- トランザクションマネージャとの連携および接続プールを制御
- JNDIに登録して使用
|
| javax.sql.XADataSource |
- JDBC2.0拡張機能が提供※2
- データベース接続に必要な接続情報の設定および取得用のメソッドを提供
- トランザクション連携機能が使用
- JNDIに登録して使用
- このクラスのオブジェクトからXAConnectionオブジェクトを取得
|
| javax.sql.XAConnection |
- JDBC2.0拡張機能が提供※2
- PooledConnectionクラスのサブクラス
- トランザクション連携機能が使用
- このクラスのオブジェクトがプール対象
- このクラスのオブジェクトからConnectionオブジェクトを取得
|
javax.transaction.xa.
XAResource |
- JDBC2.0拡張機能が提供※2
- トランザクションマネージャが使用するXA関連メソッドを提供
|
| javax.transaction.xa.Xid |
- JDBC2.0拡張機能※2およびトランザクションマネージャが提供
- XAResourceクラスの引数および戻り値として使用
|
- 注※1
- connectionErrorOccurredが返されるのは次のエラーコードの場合です。
- 接続データベースがHiRDB:-720,-722,-723,-728,-732,-932,-1700
- 接続データベースがOracle:28,1012,3113,3114,12571
- 注※2
- JDBC2.0拡張機能が提供するパッケージ名称とクラス名称を次に示します。
| 種類 |
名称 |
| パッケージ |
JP.co.Hitachi.soft.DBPSV_Driver |
| XADataSourceクラス |
JdbcDbpsvXADataSource |
| XAConnectionクラス |
JdbcDbpsvXAConnection |
| XAResourceクラス |
JdbcDbpsvXAResource |
| Xidクラス |
JdbcDbpsvXid |
トランザクション連携機能に関連するクラスのインタフェース定義は,JDKでは標準で提供していません。トランザクション連携機能を使用するときは,JavaSoftのホームページから入手しておいてください。
All Rights Reserved. Copyright (C) 2006, Hitachi, Ltd.