Class TransactionManagementHandler

java.lang.Object
nablarch.fw.TransactionEventCallback.Provider<Object>
nablarch.common.handler.TransactionManagementHandler
All Implemented Interfaces:
Handler<Object,Object>, InboundHandleable, OutboundHandleable

public class TransactionManagementHandler extends TransactionEventCallback.Provider<Object> implements Handler<Object,Object>, InboundHandleable, OutboundHandleable
後続処理における透過的トランザクションを実現するハンドラ。
通常の として使用する場合と、 として使用する場合で動作が異なる。
  として使用する場合、本ハンドラの詳細な処理内容は以下の通り。

 1.  トランザクションファクトリから使用するトランザクションオブジェクトを取得し、
     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>
として使用する場合、Inbound処理の際にトランザクションを開始し、 Outbound処理の際にトランザクションをコミットまたはロールバックする。
コミットとロールバックの判定は、 isProcessSucceded が true を返すか false を返すかで判定する。
Author:
Iwauo Tajima <iwauo@tis.co.jp>, Koichi Asano <asano.koichi@tis.co.jp>
  • Constructor Details

    • TransactionManagementHandler

      public TransactionManagementHandler()
  • Method Details

    • setTransactionFactory

      public void setTransactionFactory(TransactionFactory transactionFactory)
      トランザクションオブジェクトを取得するためのファクトリを設定する。
      Parameters:
      transactionFactory - トランザクションオブジェクトを取得するためのファクトリ
    • setTransactionName

      public void setTransactionName(String transactionName)
      このハンドラが管理するトランザクションの、スレッドコンテキスト上での登録名を設定する。
       デフォルトでは既定のトランザクション名
       (TransactionContext.DEFAULT_TRANSACTION_CONTEXT_KEY)を使用する。
      
       
      Parameters:
      transactionName - データベース接続のスレッドコンテキスト上の登録名
    • setTransactionCommitExceptions

      public void setTransactionCommitExceptions(List<String> exceptionClassNames)
      送出されてもトランザクションをコミットしなければならない例外クラスの一覧を設定する。
       指定可能な例外は実行時例外(RuntimeExceptionのサブクラス)のみである。
       なにも指定しなかった場合はいかなる例外についてもロールバックする。
       
      Parameters:
      exceptionClassNames - 送出されてもトランザクションをコミットしなければならない例外クラスの一覧
    • handle

      public Object handle(Object inputData, ExecutionContext ctx)
      入力データに対する処理を実行する。
       このクラスの実装では後続ハンドラに対する処理委譲の前後に、
       データベース接続オブジェクトの初期化と終了の処理をそれぞれ行う。
       
      Specified by:
      handle in interface Handler<Object,Object>
      Parameters:
      inputData - 入力データ
      ctx - 実行コンテキスト
      Returns:
      処理結果データ
    • handleInbound

      public Result handleInbound(ExecutionContext context)
      Description copied from interface: InboundHandleable
      前処理を実装する。
      Specified by:
      handleInbound in interface InboundHandleable
      Parameters:
      context - ExecutionContext
      Returns:
      処理結果オブジェクト
    • handleOutbound

      public Result handleOutbound(ExecutionContext context)
      Description copied from interface: OutboundHandleable
      後処理を実装する。
      Specified by:
      handleOutbound in interface OutboundHandleable
      Parameters:
      context - ExecutionContext
      Returns:
      処理結果オブジェクト
    • isCompleteTransaction

      protected boolean isCompleteTransaction(ExecutionContext context)
      トランザクションが正常終了したかどうかを判定する。
      この実装では、ExecutionContext#isProcessSucceded() がtrueを返すかどうかで、判定を行う。
      Parameters:
      context - ExecutionContext
      Returns:
      正常終了した場合 true