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

第2部 Apcoordinatorコアの機能> 第4章 APIを使ったプログラミング> 4.7 ビジネスクラスの再試行

4.7.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の処理は取り消されません。


目次 前ページ次ページ

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