パッケージ org.opengion.fukurou.db
クラス TransactionImpl
java.lang.Object
org.opengion.fukurou.db.TransactionImpl
- すべての実装されたインタフェース:
AutoCloseable
,Transaction
- 直系の既知のサブクラス:
TransactionReal
コネクションを共有して、トランザクションを実現します。
基本的には、TransactionTag で利用されますが、一部、このオブジェクトを
渡して、直接、利用するケースもあります。
トランザクションがすべて完了した後で、realClose() メソッドを呼び出します。
一度でも、rollback が指定されていれば、ロールバックを行い、コネクションを
破棄します。それ以外で、commit が指定されていれば、コミットを行い、
コネクションを、プールに戻します。どちらも指定されていなければ、
コネクションプールに戻すだけになります。
6.3.6.1 (2015/08/28)
selectを実行した後で明示的にcommit,rollbackを行わないのはOracle位
らしいので、検索終了時でも、commit か、rollback を行うようにします。
つまり、commit されない(=途中で処理が打ち切られた)場合は、
rollback するように仕様変更しますので、Transactionオブジェクトを
呼び出した処理の最後には、検索であろうとなかろうと、commit()を入れてください。
ただし、Transaction オブジェクトは、DBアクセス以外にも適用可能に
作成しているため、Connection がある場合のみ、実際の commit/rollback が
実行されます。
6.3.6.1 (2015/08/28)
一度、finish() を実行すると、次回実行時にエラーにします。
6.3.9.0 (2015/11/06)
synchronized メソッドをsynchronizedブロックに変更。
考え方として、下記のような流れになります。
Transaction tran = new TransactionImpl/Real( appInfo ) ; try { ・・・・・ tran.commit(); } catch( final Exception ex ) { tran.rollback(); } finally { tran.close(); // TransactionReal の場合 tran.finish(); // TransactionImpl の場合 }6.3.6.1 (2015/08/28) AutoCloseableを使用したtry-with-resources 構文を使用した場合。close/finish 不要。
try( Transaction tran = new TransactionImpl/Real( appInfo ) ) { ・・・・・ tran.commit(); } ただし、処理自体がアベンドしないケースでは、rollback() を、自分で呼ぶか、commit() しない(=rollback()される)ようにします。
- 変更履歴:
- 5.1.9.0 (2010/08/01) 新規作成
- 導入されたバージョン:
- JDK6.0,
-
コンストラクタの概要
コンストラクタコンストラクタ説明TransactionImpl
(ApplicationInfo appInfo) ApplicationInfo を指定して作成する、コンストラクター このクラスは、基本的には、TransactionTag クラスから作成されます。 -
メソッドの概要
修飾子とタイプメソッド説明void
close()
トランザクションの、終了時処理を行います。void
commit()
コミット処理が行われた場合に、内部フラグ(isCommit)を true にセットします。void
最終的なコミットが行われた場合に、内部フラグ(isEndCommit)を true にセットします。void
finish()
トランザクションとして、終了時処理を行います。getConnection
(String dbid) 指定のDBID に対応した、Connection オブジェクトを返します。void
rollback()
ロールバック処理が行われた場合に、内部フラグ(isRollback)を true にセットします。
-
コンストラクタの詳細
-
TransactionImpl
ApplicationInfo を指定して作成する、コンストラクター このクラスは、基本的には、TransactionTag クラスから作成されます。- パラメータ:
appInfo
- 内部統制用のアクセス情報
-
-
メソッドの詳細
-
getConnection
指定のDBID に対応した、Connection オブジェクトを返します。 内部Mapに存在していれば、そのコネクションを、存在しなければ、 新しく作成します。- 定義:
getConnection
インタフェース内Transaction
- パラメータ:
dbid
- 接続先ID- 戻り値:
- 指定のDBID に対応した、Connectionオブジェクト
- 変更履歴:
- 6.3.9.0 (2015/11/06) Use block level rather than method level synchronization.(PMD), 6.4.3.4 (2016/03/11) Map#computeIfAbsent で対応する。
-
commit
コミット処理が行われた場合に、内部フラグ(isCommit)を true にセットします。 1回でもコミットが行われており、ロールバックが行われていなければ、 コミットされます。 検索処理時でも、最後に commit() を実行してください。実行されていない場合は、 自動的に、rollback() が、実行されます。- 定義:
commit
インタフェース内Transaction
- 変更履歴:
- 6.3.6.1 (2015/08/28) AutoCloseable の close() メソッドに対応。return 不要。, 6.3.9.0 (2015/11/06) Use block level rather than method level synchronization.(PMD)
-
rollback
ロールバック処理が行われた場合に、内部フラグ(isRollback)を true にセットします。 1回でもロールバックが行われていれば、最終的にはロールバックされます。 一度も、ロールバックが行われていない場合でも、コミットが行われていない場合は、 rollback()を実行します。- 定義:
rollback
インタフェース内Transaction
- 変更履歴:
- 6.3.6.1 (2015/08/28) AutoCloseable の close() メソッドに対応。return 不要。, 6.3.9.0 (2015/11/06) Use block level rather than method level synchronization.(PMD)
-
close
トランザクションの、終了時処理を行います。 それまでの処理は、すべて正常に処理できた場合に、使用します。- 定義:
close
インタフェース内AutoCloseable
- 定義:
close
インタフェース内Transaction
- 関連項目:
- 変更履歴:
- 6.3.6.1 (2015/08/28) AutoCloseable の close() メソッドに対応。return 不要。, 6.3.9.0 (2015/11/06) Use block level rather than method level synchronization.(PMD)
-
endCommit
最終的なコミットが行われた場合に、内部フラグ(isEndCommit)を true にセットします。 通常は、この処理は、1値度だけ実行されます。 初期値が、false なので、途中で一度でも実行されると、true にセットされ、最後まで 処理されたとみなされてしまうので、注意してください。 通常は、タグリブの、doEndTag() が実行された場合に、呼びます。 このフラグが、true でないと(つまり、一度でも呼ばれないと)最終的に、commit されません。 なお、endCommit() が呼ばれると、自動的に、commit() も呼んでおきます。- 定義:
endCommit
インタフェース内Transaction
- 変更履歴:
- 6.4.3.3 (2016/03/04) 一般的なタグで、SKIP_PAGE された場合、rollback するようにします。
-
finish
トランザクションとして、終了時処理を行います。 トランザクションがすべて完了した後で、呼び出します。 一度でも、Rollback が指定されていれば、ロールバックを行い、コネクションを 破棄します。それ以外で、Commit が指定されていれば、コミットを行い、 コネクションを、プールに戻します。どちらも指定されていなければ、 コネクションプールに戻すだけになります。- 変更履歴:
- 6.3.6.1 (2015/08/28) AutoCloseable の close() メソッドに対応。メソッド名変更。, 6.3.9.0 (2015/11/06) Use block level rather than method level synchronization.(PMD), 6.4.3.4 (2016/03/11) Map#computeIfAbsent で対応する。
-