| Apcoordinator ユーザーズガイド |
目次
![]()
|
| 第2部 Apcoordinatorコアの機能 | > 第4章 APIを使ったプログラミング | > 4.6 ビジネスクラスの再試行 |
ビジネスクラス再試行機能を使用するには、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="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) --> <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メソッドは呼び出されません。
目次
![]()
|