Apcoordinator ユーザーズガイド |
目次 |
第2部 Apcoordinatorコアの機能 | > 第4章 APIを使ったプログラミング | > 4.7 ビジネスクラスの再試行 |
ビジネスクラス再試行機能を使用するには、com.fujitsu.uji.RetriableHandler
インタフェースを実装してビジネスクラスを作成します。
簡単に作成するにはcom.fujitsu.uji.GenericRetriableHandler
クラスを継承して作成します。GenericRetriableHandler
クラスはRetriableHandler
インタフェースの簡単な実装を提供します。
デフォルトでは再試行に関する設定は以下のとおりになります。
RetriableHandler
を実装したビジネスクラスのビジネスメソッド全てで再試行が有効
コマンドマップで指定したメソッドの終了後に、
ビジネスクラスやセションクラスの持つデータを参照して
再試行の有無を決定したい場合は、
ビジネスクラスの
beforeMethodCompletion
メソッドにその処理を記述します。
beforeMethodCompletion
メソッドは、
コマンドマップで指定したメソッドの終了後に呼び出されます。
beforeMethodCompletion
メソッドで再試行を指示するには、com.fujitsu.uji.DispatchContext
クラスのsetRetry
メソッドを呼び出します。引数にはtrue
を指定します。すでに予定されている再試行を取り消すには、引数にfalse
を指定してsetRetry
メソッドを呼び出します。
再試行が予定されているかどうかは、DispatchContext
クラスのgetRetry
メソッドで取得できます。例外の発生などにより再試行の条件が満たされている場合は、再試行が予定されています。この場合、getRetry
メソッドがtrue
を返します。
再試行の有無、再試行間隔、再試行最大回数をビジネスメソッドごとに指定するには、
設定ファイルフォルダにビジネスクラス設定ファイル(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) --> <retry enabled="true" retryInterval="200" retryCount="1" /> <!-- (3) --> </method> <method name="*"> <!-- (4) --> <retry enabled="false"/> <!-- (5) --> </method> </handler> </handlerConfig>
上記の記述例では、
- (1)
handler
タグでビジネスクラス1個についての設定を記述します。name
アトリビュートにビジネスクラスのクラス名をパッケージ名付きで記述します。- (2) (1)のビジネスクラスの各ビジネスメソッドの設定を
method
タグで記述します。name
アトリビュートにメソッド名を記述します。method
タグはhandler
タグのコンテントに必要なだけ繰り返して記述します。- (3) (2)のビジネスメソッドの設定を
retry
タグで記述します。retry
タグはmethod
タグのコンテントに1個だけ記述します。retry
タグには以下のアトリビュートを指定します。
enabled
- 再試行を有効にするかどうかを指定します。
true
を指定すると(2)のビジネスメソッドでビジネスクラス再試行機能が有効に、false
を指定すると無効になります。このアトリビュートを省略した場合はtrue
です。retryInterval
- 再試行間隔をミリ秒単位で指定します。このアトリビュートを省略した場合、再試行間隔は100ミリ秒です。
retryCount
- 再試行最大回数を指定します。例えば、2を指定すると、初回の実行と合わせて最大で合計3回メソッドを実行します。このアトリビュートを省略した場合、再試行最大回数は2です。
- (4),(5)
method
タグにname="*"
を指定すると、デフォルトの設定を定義できます。このデフォルトの設定は、対応するmethodタグがないビジネスメソッドや、method
タグは存在してもretry
タグが省略されている場合に適用されます。sample.SampleHandler
クラスのdoUpdate
メソッドではビジネスクラス再試行機能が有効で、その他のビジネスメソッドでは無効になります。
再試行間隔の精度はご使用になるシステムに依存します。 10ミリ秒より高い精度による指定はシステムによっては有効にならない場合があります。
ビジネスクラス再試行機能を使用した場合、ビジネスクラスのメソッドは以下の順序で呼び出されます。
ビジネスクラスがcom.fujitsu.uji.Postprocessor
インタフェースを実装している場合は、postprocess
メソッドとhandleException
メソッドのどちらか一方が呼び出されます。handleException
が呼ばれるのは以下の場合です。それ以外はpostprocess
が呼び出されます。
beforeMethodCompletion
メソッドでsetRetry(false)
が実行された場合。
setRetry(true)
が実行され、かつ、再試行最大回数を超えるため再試行できない場合。この場合、com.fujitsu.uji.RetryCountExpiredException
がhandleException
に通知されます。
beforeMethodCompletion
で発生した例外は、handleException
には通知されません。
ビジネスクラスがRetriableHandler
インタフェースを実装していても、ビジネスクラス設定ファイルでビジネスクラス再試行機能が無効に設定されている場合は、beforeMethodCompletion
メソッドは呼び出されません。
目次 |