パッケージ org.opengion.fukurou.db

クラス TransactionImpl

java.lang.Object
org.opengion.fukurou.db.TransactionImpl
すべての実装されたインタフェース:
AutoCloseable, Transaction
直系の既知のサブクラス:
TransactionReal

public class TransactionImpl extends Object implements Transaction
コネクションを共有して、トランザクションを実現します。 基本的には、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,
  • コンストラクタの概要

    コンストラクタ
    コンストラクタ
    説明
    ApplicationInfo を指定して作成する、コンストラクター このクラスは、基本的には、TransactionTag クラスから作成されます。
  • メソッドの概要

    修飾子とタイプ
    メソッド
    説明
    void
    トランザクションの、終了時処理を行います。
    void
    コミット処理が行われた場合に、内部フラグ(isCommit)を true にセットします。
    void
    最終的なコミットが行われた場合に、内部フラグ(isEndCommit)を true にセットします。
    void
    トランザクションとして、終了時処理を行います。
    指定のDBID に対応した、Connection オブジェクトを返します。
    void
    ロールバック処理が行われた場合に、内部フラグ(isRollback)を true にセットします。

    クラスから継承されたメソッド java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • コンストラクタの詳細

    • 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

      public void 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

      public void 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

      public void 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

      public void endCommit()
      最終的なコミットが行われた場合に、内部フラグ(isEndCommit)を true にセットします。 通常は、この処理は、1値度だけ実行されます。 初期値が、false なので、途中で一度でも実行されると、true にセットされ、最後まで 処理されたとみなされてしまうので、注意してください。 通常は、タグリブの、doEndTag() が実行された場合に、呼びます。 このフラグが、true でないと(つまり、一度でも呼ばれないと)最終的に、commit されません。 なお、endCommit() が呼ばれると、自動的に、commit() も呼んでおきます。
      定義:
      endCommit インタフェース内 Transaction
      変更履歴:
      6.4.3.3 (2016/03/04) 一般的なタグで、SKIP_PAGE された場合、rollback するようにします。
    • finish

      public void 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 で対応する。