Apcoordinator ユーザーズガイド
目次 前ページ次ページ

第2部 Apcoordinatorコアの機能> 第4章 APIを使ったプログラミング> 4.8 トランザクションの管理

4.8.2 ビジネスクラスの作成

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

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

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

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

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

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

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

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

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

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

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

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


<?xml version="1.0" encoding="iso-2022-jp"?>
<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では、RuntimeExceptionError、それらのサブクラスに加えて、some.pkg.MyExceptionをロールバック例外として使用します。

■メソッドの実行順序

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

メソッドの呼び出し順序

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

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

例外を発生する処理後続の処理の実行有無
before
Transaction
Begin
トランザクション開始 ビジネスメソッド before
Transaction
Completion
トランザクション終了 after
Transaction
Completion
handle
Exception (*1)
preprocess × × × × × × × (*2)
beforeTransactionBegin × × × × ×
トランザクション開始 × ×
(*1) ビジネスクラスがPostprocessorインタフェースを実装している場合に呼び出されます。
(*2) handleException, postprocessのどちらも呼び出されません。
注意
ビジネスクラスがTransactionHandlerインタフェースを実装していても、ビジネスクラス設定ファイルでトランザクション管理機能が無効に設定されている場合は、beforeTransactionBegin, beforeTransactionCompletion, afterTransactionCompletionメソッドは呼び出されません。

目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2000-2005