public class TransactionManagementHandler extends TransactionEventCallback.Provider<java.lang.Object> implements Handler<java.lang.Object,java.lang.Object>, InboundHandleable, OutboundHandleable
として使用する場合、本ハンドラの詳細な処理内容は以下の通り。 1. トランザクションファクトリから使用するトランザクションオブジェクトを取得し、として使用する場合、Inbound処理の際にトランザクションを開始し、 Outbound処理の際にトランザクションをコミットまたはロールバックする。TransactionContext
上に設定する。 2. トランザクションを開始する。 3. ハンドラスタックから次のリクエストハンドラを取得し、処理を委譲する。 4a. 委譲先の処理において例外が発生しなければトランザクションをコミットする。 4b. 例外が発生した場合はトランザクションをロールバックする。 ただし、このとき送出された例外が、setTransactionCommitExceptions(java.util.List)
で設定された例外の いずれかのサブクラスである場合はトランザクションをコミットする。 5. トランザクションオブジェクトをTransactionContext
から除去する。 設定例:
<component class="nablarch.common.handler.TransactionManagementHandler"> <!-- トランザクションファクトリ --> <property name="transactionFactory" value="transactionFactory"/> <!-- トランザクションをコミットする例外 --> <property name="transactionCommitExceptions"> <list> <value>example.TransactionCommitException</value> <value>example.TransactionCommitException2</value> </list> </property> </component>
Constructor and Description |
---|
TransactionManagementHandler() |
Modifier and Type | Method and Description |
---|---|
java.lang.Object |
handle(java.lang.Object inputData,
ExecutionContext ctx)
入力データに対する処理を実行する。
|
Result |
handleInbound(ExecutionContext context)
前処理を実装する。
|
Result |
handleOutbound(ExecutionContext context)
後処理を実装する。
|
protected boolean |
isCompleteTransaction(ExecutionContext context)
トランザクションが正常終了したかどうかを判定する。
この実装では、ExecutionContext#isProcessSucceded() がtrueを返すかどうかで、判定を行う。 |
void |
setTransactionCommitExceptions(java.util.List<java.lang.String> exceptionClassNames)
送出されてもトランザクションをコミットしなければならない例外クラスの一覧を設定する。
|
void |
setTransactionFactory(TransactionFactory transactionFactory)
トランザクションオブジェクトを取得するためのファクトリを設定する。
|
void |
setTransactionName(java.lang.String transactionName)
このハンドラが管理するトランザクションの、スレッドコンテキスト上での登録名を設定する。
|
callAbnormalEndHandlers, callNormalEndHandlers, prepareListeners
public void setTransactionFactory(TransactionFactory transactionFactory)
transactionFactory
- トランザクションオブジェクトを取得するためのファクトリpublic void setTransactionName(java.lang.String transactionName)
デフォルトでは既定のトランザクション名
(TransactionContext.DEFAULT_TRANSACTION_CONTEXT_KEY
)を使用する。
transactionName
- データベース接続のスレッドコンテキスト上の登録名public void setTransactionCommitExceptions(java.util.List<java.lang.String> exceptionClassNames)
指定可能な例外は実行時例外(RuntimeExceptionのサブクラス)のみである。 なにも指定しなかった場合はいかなる例外についてもロールバックする。
exceptionClassNames
- 送出されてもトランザクションをコミットしなければならない例外クラスの一覧public java.lang.Object handle(java.lang.Object inputData, ExecutionContext ctx)
このクラスの実装では後続ハンドラに対する処理委譲の前後に、 データベース接続オブジェクトの初期化と終了の処理をそれぞれ行う。
public Result handleInbound(ExecutionContext context)
InboundHandleable
handleInbound
in interface InboundHandleable
context
- ExecutionContextpublic Result handleOutbound(ExecutionContext context)
OutboundHandleable
handleOutbound
in interface OutboundHandleable
context
- ExecutionContextprotected boolean isCompleteTransaction(ExecutionContext context)
context
- ExecutionContext