ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド

4.7.2 ビジネスクラスの作成

トランザクション管理機能を使用するには、com.fujitsu.uji.transaction.TransactionHandlerインタフェースを実装してビジネスクラスを作成します。 簡単に作成したい場合は、com.fujitsu.uji.transaction.GenericTransactionHandlerクラスを継承して作成します。GenericTransactionHandlerクラスはTransactionHandlerインタフェースの簡単な実装を提供します。

デフォルトでは、Apcoordinatorによって以下のようにトランザクションが制御されます。

トランザクション開始直前に特定の処理を実行する

トランザクションの開始直前に特定の処理を実行したい場合には、ビジネスクラスのbeforeTransactionBeginメソッドにその処理を記述します。このメソッドは、トランザクション開始前に呼び出されます。

トランザクション終了直前に特定の処理を実行する

トランザクションのコミットまたはロールバックの直前に特定の処理を実行したい場合は、ビジネスクラスのbeforeTransactionCompletionメソッドにその処理を記述します。 beforeTransactionCompletionは、ビジネスメソッドの実行終了後でトランザクションをコミットまたはロールバックする直前に呼び出されます。現在のトランザクションの状況を取得するには、com.fujitsu.uji.DispatchContextクラスのgetRollbackOnlyメソッドを使用します。例外の発生やsetRollbackOnlyの実行によってロールバックすることが決定している場合、getRollbackOnlyはtrueを返します。

beforeTransactionCompletionで以下の処理を行った場合は、トランザクションはロールバックされます。

トランザクション終了後に特定の処理を実行する

トランザクションのコミット後またはロールバック後に特定の処理を実行したい場合は、ビジネスクラスのafterTransactionCompletionメソッドにその処理を記述します。 afterTransactionCompletionは、トランザクションをコミットまたはロールバックした直後に呼び出されます。

ビジネスメソッドごとにトランザクション管理機能の動作を設定する

ビジネスメソッドごとにトランザクション管理機能の有無や追加のロールバック例外を指定するには、設定ファイルフォルダにビジネスクラス設定ファイル(handlerconfig.xml)を作成して設定を記述します。

以下は、ビジネスクラス設定ファイル(handlerconfig.xml)の記述例です。

<?xml version="1.0" encoding="Shift_JIS"?>
<handlerConfig
    xmlns=http://interstage.fujitsu.com/schemas/uji/handlerConfig
    xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
    xsi:schemaLocation="http://interstage.fujitsu.com/schemas/uji/handlerConfig
                        http://interstage.fujitsu.com/schemas/uji/handlerconfig.xsd">
  <config>
    <version>6.0</version>
  </config>

  <handler name="sample.SampleHandler"> <!-- (1) -->
    <method name="doUpdate">            <!-- (2) -->
      <transaction enabled="true">      <!-- (3) -->
        <rollbackException class="some.pkg.MyException">  <!-- (4) -->
      </transaction>
    </method>
    <method name="*">                   <!-- (5) -->
      <transaction enabled="false"/>    <!-- (6) -->
    </method>
  </handler>

</handlerConfig>

上記の記述例では、sample.SampleHandlerクラスのdoUpdateメソッドではトランザクション管理機能が有効で、その他のメソッドでは無効になります。doUpdateでは、RuntimeException、Error、それらのサブクラスに加えて、some.pkg.MyExceptionをロールバック例外として使用します。

メソッドの実行順序

トランザクション管理機能を使用した場合、ビジネスクラスのメソッドは以下の順序で呼び出されます。

ビジネスクラスがcom.fujitsu.uji.Postprocessorインタフェースを実装している場合は、postprocessメソッドとhandleExceptionメソッドのどちらか一方が呼び出されます。handleExceptionが呼ばれるのは以下の処理で例外が発生した場合です。それ以外はpostprocessが呼び出されます。

preprocess、beforeTransactionBegin、トランザクション開始処理で例外が発生した場合、後続の処理の一部はスキップされます。例外の発生個所とスキップされる処理の関係を以下の表に示します。

例外を発生する処理

後続の処理の実行有無

before
Transaction
Begin

トランザクション開始

ビジネスメソッド

before
Transaction
Completion

トランザクション終了

after
Transaction
Completion

handle
Exception (*1)

preprocess

×

×

×

×

×

×

×(*2)

beforeTransactionBegin

×

×

×

×

×

トランザクション開始

○: 実行されます。
×: 実行されません。
-: 後続の処理に該当しません。

(*1) ビジネスクラスがPostprocessorインタフェースを実装している場合に呼び出されます。
(*2) handleException, postprocessのどちらも呼び出されません。

注意

ビジネスクラスがTransactionHandlerインタフェースを実装していても、ビジネスクラス設定ファイルでトランザクション管理機能が無効に設定されている場合は、beforeTransactionBegin, beforeTransactionCompletion, afterTransactionCompletionメソッドは呼び出されません。