org.seasar.doma.jdbc.tx
クラス LocalTransaction

java.lang.Object
  上位を拡張 org.seasar.doma.jdbc.tx.LocalTransaction
直系の既知のサブクラス:
KeepAliveLocalTransaction

public class LocalTransaction
extends Object

ローカルトランザクションです。

このクラスはスレッドセーフです。

begin() もしくは begin(TransactionIsolationLevel) でトランザクションを開始した後、トランザクションは必ず commit() もしくは rollback() で終了してください。 rollback()は、begin() が成功する前や commit() が成功した後に呼び出された場合、実質的には何も行いません。したがって、次のように記述できます。

 LocalTransaction tx = AppConfig.getLocalTransaction();
 try {
     // 開始
     tx.begin();
 
     Employee employee = dao.selectById(1);
     employee.setName("hoge");
     employee.setJobType(JobType.PRESIDENT);
     dao.update(employee);
 
     // コミット
     tx.commit();
 } finally {
     // ロールバック
     tx.rollback();
 }
 
トランザクションを終了した後、 同じインスタンスに対して begin() もしくは begin(TransactionIsolationLevel) を呼び出した場合、新しいトランザクションを開始できます。
 LocalTransaction tx = AppConfig.getLocalTransaction();
 try {
     // トランザクションAの開始
     tx.begin();
     ...
     tx.commit();
 } finally {
     tx.rollback();
 }
 try {
     // トランザクションBの開始
     tx.begin();
     ...
     tx.commit();
 } finally {
     tx.rollback();
 }
 
トランザクション開始後、このクラスのいずれかのメソッドが例外をスローした場合、 トランザクションは直ちにロールバックされます。

導入されたバージョン:
1.1.0
作成者:
taedium

フィールドの概要
protected  String className
          クラス名
protected  DataSource dataSource
          データソース
protected  TransactionIsolationLevel defaultTransactionIsolationLevel
          デフォルトのトランザクション分離レベル、指定されない場合 null
protected  JdbcLogger jdbcLogger
          JDBCに関するロガー
protected  ThreadLocal<org.seasar.doma.jdbc.tx.LocalTransactionContext> localTxContextHolder
          ローカルトランザクションコンテキストのホルダー
 
コンストラクタの概要
protected LocalTransaction(DataSource dataSource, ThreadLocal<org.seasar.doma.jdbc.tx.LocalTransactionContext> localTxContextHolder, JdbcLogger jdbcLogger)
          インスタンスを構築します。
protected LocalTransaction(DataSource dataSource, ThreadLocal<org.seasar.doma.jdbc.tx.LocalTransactionContext> localTxContextHolder, JdbcLogger jdbcLogger, TransactionIsolationLevel defaultTransactionIsolationLevel)
          デフォルトのトランザクション分離レベルを指定してインスタンスを構築します。
 
メソッドの概要
 void begin()
          ローカルトランザクションを開始します。
 void begin(TransactionIsolationLevel transactionIsolationLevel)
          トランザクション分離レベルを指定してローカルトランザクションを開始します。
protected  void beginInternal(TransactionIsolationLevel transactionIsolationLevel, String callerMethodName)
          内部的にローカルトランザクションを開始します。
 void commit()
          ローカルトランザクションをコミットします。
protected  org.seasar.doma.jdbc.tx.LocalTransactionContext createLocalTransactionContext()
          ローカルトランザクションコンテキストを生成します。
protected  void end(String callerMethodName)
          ローカルトランザクションを終了します。
protected  void endInternal(org.seasar.doma.jdbc.tx.LocalTransactionContext context, String callerMethodName)
           
 boolean hasSavepoint(String savepointName)
          このローカルトランザクションでセーブポイントを保持しているかどうかを返します。
 boolean isActive()
          ローカルトランザクションがアクティブな場合 true を返します。
protected  boolean isActiveInternal(org.seasar.doma.jdbc.tx.LocalTransactionContext context)
           
protected  void release(org.seasar.doma.jdbc.tx.LocalTransactionContext context, String callerMethodName)
          トランザクションコンテキストを開放します。
 void releaseSavepoint(String savepointName)
          ローカルトランザクションから指定されたセーブポイントと以降のセーブポイントを削除します。
 void rollback()
          ローカルトランザクションをロールバックします。
 void rollback(String savepointName)
          指定されたセーブポイントが設定されたあとに行われたすべての変更をロールバックします。
protected  void rollbackInternal(String callerMethodName)
          内部的にロールバックします。
 void setSavepoint(String savepointName)
          ローカルトランザクションのセーブポイントを作成します。
 String toString()
          トランザクションを識別するための文字列表現を返します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

フィールドの詳細

dataSource

protected final DataSource dataSource
データソース


localTxContextHolder

protected final ThreadLocal<org.seasar.doma.jdbc.tx.LocalTransactionContext> localTxContextHolder
ローカルトランザクションコンテキストのホルダー


jdbcLogger

protected final JdbcLogger jdbcLogger
JDBCに関するロガー


defaultTransactionIsolationLevel

protected final TransactionIsolationLevel defaultTransactionIsolationLevel
デフォルトのトランザクション分離レベル、指定されない場合 null


className

protected final String className
クラス名

コンストラクタの詳細

LocalTransaction

protected LocalTransaction(DataSource dataSource,
                           ThreadLocal<org.seasar.doma.jdbc.tx.LocalTransactionContext> localTxContextHolder,
                           JdbcLogger jdbcLogger)
インスタンスを構築します。

パラメータ:
dataSource - データソース
localTxContextHolder - ローカルトランザクションコンテキストのホルダー
jdbcLogger - JDBCに関するロガー

LocalTransaction

protected LocalTransaction(DataSource dataSource,
                           ThreadLocal<org.seasar.doma.jdbc.tx.LocalTransactionContext> localTxContextHolder,
                           JdbcLogger jdbcLogger,
                           TransactionIsolationLevel defaultTransactionIsolationLevel)
デフォルトのトランザクション分離レベルを指定してインスタンスを構築します。

パラメータ:
dataSource - データソース
localTxContextHolder - ローカルトランザクションコンテキストのホルダー
jdbcLogger - JDBCに関するロガー
defaultTransactionIsolationLevel - デフォルトのトランザクション分離レベル
メソッドの詳細

begin

public void begin()
ローカルトランザクションを開始します。

このメソッドを呼び出した場合、commit() もしくは rollback() を呼び出し、ローカルトランザクションを終了する必要があります。同一スレッド内であれば、 異なるインスタンスの commit() もしくは rollback() でも構いません。

例外:
LocalTransactionAlreadyBegunException - ローカルトランザクションがすでに開始されている場合
JdbcException - トランザクションの開始に失敗した場合

begin

public void begin(TransactionIsolationLevel transactionIsolationLevel)
トランザクション分離レベルを指定してローカルトランザクションを開始します。

このメソッドを呼び出した場合、commit() もしくは rollback() を呼び出し、ローカルトランザクションを終了する必要があります。同一スレッド内であれば、 異なるインスタンスの commit() もしくは rollback() でも構いません。

パラメータ:
transactionIsolationLevel - トランザクション分離レベル
例外:
DomaNullPointerException - 引数が null の場合
LocalTransactionAlreadyBegunException - ローカルトランザクションがすでに開始されている場合
JdbcException - トランザクションの開始に失敗した場合

beginInternal

protected void beginInternal(TransactionIsolationLevel transactionIsolationLevel,
                             String callerMethodName)
内部的にローカルトランザクションを開始します。

パラメータ:
transactionIsolationLevel - トランザクション分離レベル
callerMethodName - 呼び出し元のメソッド名

createLocalTransactionContext

protected org.seasar.doma.jdbc.tx.LocalTransactionContext createLocalTransactionContext()
ローカルトランザクションコンテキストを生成します。

戻り値:
ローカルトランザクションコンテキスト

commit

public void commit()
ローカルトランザクションをコミットします。

このメソッドを呼び出す前に begin() または begin(TransactionIsolationLevel) を呼び出し、ローカルトランザクションを開始しておく必要があります。 同一スレッド内であれば、 異なるインスタンスの begin() または begin(TransactionIsolationLevel) でも構いません。

例外:
LocalTransactionNotYetBegunException - ローカルトランザクションがまだ開始されていない場合
JdbcException - コミットに失敗した場合

rollback

public void rollback()
ローカルトランザクションをロールバックします。

ローカルトランザクションが開始されていない場合、何もおこないません。

このメソッドは、例外をスローしません。


rollbackInternal

protected void rollbackInternal(String callerMethodName)
内部的にロールバックします。

このメソッドは、実行時例外をスローしません。

パラメータ:
callerMethodName - 呼び出し元のメソッド名

setSavepoint

public void setSavepoint(String savepointName)
ローカルトランザクションのセーブポイントを作成します。

このメソッドを呼び出す前に begin() または begin(TransactionIsolationLevel) を呼び出し、ローカルトランザクションを開始しておく必要があります。 同一スレッド内であれば、 異なるインスタンスの begin() または begin(TransactionIsolationLevel) でも構いません。

パラメータ:
savepointName - セーブポイントの名前
例外:
DomaNullPointerException - 引数が null の場合
LocalTransactionNotYetBegunException - ローカルトランザクションがまだ開始されていない場合
SavepointAleadyExistsException - セーブポイントがすでに存在する場合
JdbcException - セーブポイントの作成に失敗した場合

hasSavepoint

public boolean hasSavepoint(String savepointName)
このローカルトランザクションでセーブポイントを保持しているかどうかを返します。

パラメータ:
savepointName - セーブポイントの名前
戻り値:
セーブポイントを保持している場合 ture
例外:
DomaNullPointerException - 引数が null の場合
LocalTransactionNotYetBegunException - ローカルトランザクションがまだ開始されていない場合
導入されたバージョン:
1.2.0

releaseSavepoint

public void releaseSavepoint(String savepointName)
ローカルトランザクションから指定されたセーブポイントと以降のセーブポイントを削除します。

このメソッドを呼び出す前に begin() または begin(TransactionIsolationLevel) を呼び出し、ローカルトランザクションを開始しておく必要があります。 同一スレッド内であれば、 異なるインスタンスの begin() または begin(TransactionIsolationLevel) でも構いません。

パラメータ:
savepointName - セーブポイントの名前
例外:
DomaNullPointerException - 引数が null の場合
LocalTransactionNotYetBegunException - ローカルトランザクションがまだ開始されていない場合
JdbcException - セーブポイントの削除に失敗した場合

rollback

public void rollback(String savepointName)
指定されたセーブポイントが設定されたあとに行われたすべての変更をロールバックします。

このメソッドを呼び出す前に begin() または begin(TransactionIsolationLevel) を呼び出し、ローカルトランザクションを開始しておく必要があります。 同一スレッド内であれば、 異なるインスタンスの begin() または begin(TransactionIsolationLevel) でも構いません。

パラメータ:
savepointName - セーブポイントの名前
例外:
DomaNullPointerException - 引数が null の場合
SavepointNotFoundException - セーブポイントが見つからない場合
LocalTransactionNotYetBegunException - ローカルトランザクションがまだ開始されていない場合
JdbcException - セーブポイントへのロールバックに失敗した場合

end

protected void end(String callerMethodName)
ローカルトランザクションを終了します。

このメソッドは、実行時例外をスローしません。

パラメータ:
callerMethodName - 呼び出し元のメソッド名

endInternal

protected void endInternal(org.seasar.doma.jdbc.tx.LocalTransactionContext context,
                           String callerMethodName)

release

protected void release(org.seasar.doma.jdbc.tx.LocalTransactionContext context,
                       String callerMethodName)
トランザクションコンテキストを開放します。

このメソッドは、実行時例外をスローしません。

パラメータ:
context - トランザクションコンテキスト
callerMethodName - 呼び出し元のメソッド名

toString

public String toString()
トランザクションを識別するための文字列表現を返します。

オーバーライド:
クラス Object 内の toString

isActive

public boolean isActive()
ローカルトランザクションがアクティブな場合 true を返します。

戻り値:
ローカルトランザクションがアクティブな場合 true

isActiveInternal

protected boolean isActiveInternal(org.seasar.doma.jdbc.tx.LocalTransactionContext context)


Copyright © 2009-2014 The Seasar Foundation. All Rights Reserved.