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

4.7.3 トランザクション管理機能とビジネスクラス再試行機能の併用

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

ビジネスクラス設定ファイル(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">
    <method name="doUpdate">
      <transaction enabled="true"/>     <!-- (1) -->
      <retry enabled="true" retryInterval="200" retryCount="1" />     <!-- (2) -->
    </method>
    <method name="search">
      <retry enabled="true" retryInterval="200" retryCount="1" />     <!-- (3) -->
    </method>
    <method name="*">
      <transaction enabled="false"/>    <!-- (4) -->
      <retry enabled="false"/>          <!-- (5) -->
    </method>
  </handler>

</handlerConfig>

この記述例による設定内容は以下のとおりです。

トランザクション管理機能とビジネスクラス再試行機能を併用した場合、ビジネスクラス再試行機能とトランザクション管理機能が連動して動作します。再試行が行われる場合は、再試行直前にトランザクションがロールバックされ、再度トランザクションが開始されます。

また、ビジネスクラスのメソッドは以下の順序で呼び出されます。再試行される場合は、afterTransactionCompletionまで実行されたあとに再試行され、beforeTransactionBeginから再度実行されます。

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

preprocess、beforeTransactionBegin、トランザクション開始処理で発生した例外は、handleExceptionに通知されません。

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

例外を発生する処理

後続の処理の実行有無

before
Transaction
Begin

トランザクション開始

ビジネスメソッド

before
Transaction
Completion

before
Method
Completion

トランザクション終了

after
Transaction
Completion

handle
Exception (*1)

preprocess

×

×

×

×

×

×

×

×(*2)

beforeTransactionBegin

×

×

×

×

×

×

トランザクション開始

×

×

×

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

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