AsyncServiceAdapterインタフェースを実装し、サービスアダプタを作成できます。
AsyncServiceFactoryインタフェースで指定したサービス名が、asyncマップで定義したuserタグのname属性と一致する場合に、利用者が作成した指定のサービスアダプタを生成します。
次は、MyAppcServiceというサービス名のアダプタを直接呼び出しするasyncマップの定義例です。
<asyncMap> <user name="MyAppcService" class="test.MyAppService"/>
次は、test.MyAppServiceクラスの定義例です。
package test;
import com.fujitsu.uji.async.*;
public class MyAppService implements AsyncServiceAdapter{
public MyAppService(){
...
}
public void begin(Object parameter) throws AsyncServiceException{
...
}
public AsyncServiceID execute(Object data, Object parameter) throws AsyncServiceException{
...
}
public boolean hasResult(AsyncServiceID id) throws AsyncServiceException{
...
}
public Object getResult(AsyncServiceID id) throws AsyncServiceException{
...
}
public Object removeResult(AsyncServiceID id) throws AsyncServiceException{
...
}
...次は、上記のサービスを利用するプログラム例です。
AsyncServiceFactory factory
= (AsyncServiceFactory)InitialFactory.createFactory(context, InitialFactory.ASYNCSERVICEFACTORY);
// userタグのname属性がMyAppcServiceの環境を参照しサービスアダプタインスタンスを生成する。
AsyncServiceAdapter adapter = factory.createAsyncServiceAdapter("MyAppcService");
adapter.begin(null);
// executeメソッドを呼び出す。
adapter.execute(null, null);
...beginメソッド
本メソッドで呼び出す利用者アプリケーションの初期化を行います。
executeメソッド
利用者アプリケーションを実行します。
引数へは呼び出すアプリケーションで利用するパラメタを指定してください。
getResultメソッド
利用者アプリケーションの結果を参照します。
受け取る結果は、利用者が作成したアダプタの実装に依存します。
結果は、アダプタの実装、サービスの呼び出し方法、および、状態により異なります。
直接呼出し
利用者の実装した結果が返ります。
同期変換
利用者の実装した結果が返ります。
突き放し
nullが返ります。
突き合せ(結果待ち合わせ中)
AsyncServiceUnreceivedResultが返ります。
突き合せ(結果受け取り後)
利用者の実装した結果が返ります。
AsyncServiceResultListener
突き合せによる呼び出しを行なう場合に、AsyncServiceResultListenerを設定することにより、結果を受け取ることが可能です。
listenerへは、AsyncServiceResultEventが通知されます。通知イベントのgetValueメソッドにより得られるオブジェクトは、利用者の実装したgetResultメソッドが返すオブジェクトが返ります。