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

4.6.3 ビジネスクラス再試行機能使用時の注意事項

ビジネスクラスが再試行される場合でも、再試行前にビジネスクラスが実行した処理は取り消されません。このため、ビジネスクラス再試行機能を使用する場合は、以下の点に注意してビジネスクラスを作成してください。

ビジネスメソッドでEJBを呼び出す場合の注意事項

ビジネスメソッドでEJBセションBeanのオブジェクトを作成している場合、再試行前にEJBセションBeanのオブジェクトを削除するようにプログラムしてください。 com.fujitsu.uji.ext.CallFactoryインタフェースのcreateCallメソッド、または、com.fujitsu.uji.ejb.EJBCallFactoryクラスのcreateUjiSessionCallメソッドを使ってEJBセションBeanのオブジェクトを作成した場合は、 com.fujitsu.uji.ejb.UjiSessionCallインタフェースのremoveメソッドによりEJBセションBeanのオブジェクトが削除されます。createCallによって取得したCallインタフェースの場合は、UjiSessionCallにキャストしてremoveを実行してください。

ビジネスメソッドでEJBセションBeanのオブジェクトを作成し、再試行前に削除しなかった場合、そのオブジェクトが再試行後も残存します。

ビジネスメソッドの引数に与えられたデータBeanに関する注意事項

ビジネスメソッドの引数に与えられたデータBeanに変更を加える場合は、再試行例外が発生する処理が完了したあとでデータBeanに変更を加えてください。また、setRetry(true)を実行する場合は、データBeanに変更を加えないでください。データBeanに変更が加えられたあとで再試行した場合、再試行によってビジネスメソッドが呼び出された時点で、変更後のデータBeanがビジネスメソッドの引数に与えられます。

ビジネスクラス、セションクラス、アプリケーションクラスのデータを変更する場合の注意事項

以下のクラスのオブジェクトは、ビジネスクラスの呼び出しが終了したあとも生存しています。これらのオブジェクトが持つデータを変更したあとで再試行した場合、再試行によってビジネスメソッドが呼び出された時点で、オブジェクトが持つデータは変更後の状態のままになっています。

再試行前のデータ変更が再試行後に残っていることが問題となる場合は、再試行例外が発生する処理が完了したあとでビジネスクラス、セションクラス、アプリケーションクラスのデータを変更してください。また、setRetry(true)を実行した場合はビジネスクラス、セションクラス、アプリケーションクラスのデータを変更しないでください。

以下に、再試行例外が発生する処理が完了したあとでビジネスクラス、セションクラス、アプリケーションクラスのデータを変更するプログラムの概略を示します。

import com.fujitsu.uji.DispatchContext;
import com.fujitsu.uji.GenericRetriableHandler;
...

public class SomeHandler extends GenericRetriableHandler {

    public boolean init() {
        return true;
    }

    public Object doSomething(DispatchContext context, SomeBean dataBean) throws MyException {

        // 以下のtryからcatchまでの処理で例外が発生した場合は、
        // 再試行例外MyExceptionを発生させるようにプログラムしています。
        // この範囲では、ビジネスクラス、セションクラス、アプリケーション
        // クラスのデータを変更しないようにします。
        try {
            ...
        } catch (Exception e) {
            throw new MyException(e.getMessage(),e);
        }
        
        // これ以降は再試行例外が発生しません。
        // ビジネスクラス、セションクラス、アプリケーションクラスのデータの
        // 変更や、ビジネスメソッドの引数のデータBeanの変更はこの段階で行い
        // ます。
        ...

        return dataBean;
    }
    ...
}

setResponseBeanメソッド使用時の注意事項

com.fujitsu.uji.DispatchContextクラスのsetResponseBeanメソッドを実行したあとでは、再試行例外を発生させないでください。また、setRetry(true)を実行した場合はsetResponseBeanを実行しないでください。 setResponseBeanを実行後に再試行した場合、再試行前のsetResponseBeanの処理は取り消されません。