Apcoordinator ユーザーズガイド |
目次 |
第2部 Apcoordinatorコアの機能 | > 第4章 APIを使ったプログラミング | > 4.8 トランザクションの管理 |
トランザクション管理機能とビジネスクラス再試行機能の両方を使用するには、com.fujitsu.uji.transaction.TransactionHandler
インタフェースとcom.fujitsu.uji.RetriableHandler
インタフェースを実装してビジネスクラスを作成します。 簡単に作成したい場合は、com.fujitsu.uji.transaction.RetriableTransactionHandler
クラスを継承して作成します。RetriableTransactionHandler
クラスはTransactionHandler
インタフェースとRetriableHandler
インタフェースの簡単な実装を提供します。
ビジネスクラス設定ファイル(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"> <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>
この記述例による設定内容は以下のとおりです。
sample.SampleHandler
クラスのdoUpdate
メソッドでは、(1), (2)の指定により、トランザクション管理機能とビジネスクラス再試行機能の両方が有効です。sample.SampleHandler
クラスのsearch
メソッドでは、(3)の指定により、ビジネスクラス再試行機能は有効です。トランザクション管理機能についての指定はないため、(4)で指定されたデフォルトの定義に従い、トランザクション管理機能は無効になります。sample.SampleHandler
クラスのその他のメソッドでは、(4), (5)の指定によりトランザクション管理機能、ビジネスクラス再試行機能の両方とも無効です。
トランザクション管理機能とビジネスクラス再試行機能を併用した場合、 ビジネスクラス再試行機能とトランザクション管理機能が連動して動作します。 再試行が行われる場合は、再試行直前にトランザクションがロールバックされ、再度トランザクションが開始されます。
また、ビジネスクラスのメソッドは以下の順序で呼び出されます。再試行される場合は、afterTransactionCompletion
まで実行された後に再試行され、beforeTransactionBegin
から再度実行されます。
ビジネスクラスがcom.fujitsu.uji.Postprocessor
インタフェースを実装している場合は、postprocess
メソッドとhandleException
メソッドのどちらか一方が呼び出されます。handleException
が呼ばれるのは以下の場合です。それ以外はpostprocess
が呼び出されます。
beforeTransactionBegin
またはトランザクション開始処理で例外が発生した場合。
beforeMethodCompletion
でsetRetry(false)
が実行された場合。
setRetry(true)
が実行され、かつ、再試行最大回数を超えるため再試行できない場合。この場合、com.fujitsu.uji.RetryCountExpiredExceptionがhandleException
に通知されます。
preprocess
、beforeTransactionBegin
、トランザクション開始処理で発生した例外は、handleException
に通知されません。
preprocess
、beforeTransactionBegin
、トランザクション開始処理で例外が発生した場合、後続の処理の一部はスキップされます。例外の発生個所とスキップされる処理の関係を以下の表に示します。
例外を発生する処理 後続の処理の実行有無 before
Transaction
Beginトランザクション開始 ビジネスメソッド before
Transaction
Completionbefore
Method
Completionトランザクション終了 after
Transaction
Completionhandle
Exception (*1)preprocess
× × × × × × × × (*2) beforeTransactionBegin
− × × × × × × ○ トランザクション開始 − − × ○ × × ○ ○ (*1) ビジネスクラスが
- ○: 実行されます。
- ×: 実行されません。
- −: 後続の処理に該当しません。
Postprocessor
インタフェースを実装している場合に呼び出されます。
(*2)handleException
,postprocess
のどちらも呼び出されません。
目次 |