AsyncServiceFactoryインタフェース、AsyncServiceAdapterインタフェースといったインタフェースを利用します。各インタフェースを利用し、異なるアプリケーションを呼び出すサービスの利用が可能となります。
AsyncServiceFactoryインタフェース、AsyncServiceAdapterインタフェースの利用例を示します。
import com.fujitsu.uji.async.AsyncServiceFactory;
import com.fujitsu.uji.async.AsyncServiceAdapter;
import com.fujitsu.uji.async.AsyncServiceID;
import com.fujitsu.uji.async.AsyncServiceFactory;
public Object doSomething(DispatchContext context, DataBean dataBean){
try {
// 1)ファクトリを取得する。
AsyncServiceFactory factory
= (AsyncServiceFactory)InitialFactory.createFactory(context, InitialFactory.ASYNCSERVICEFACTORY);
// 2)サービスを提供するアダプタインスタンスを生成する。
AsyncServiceAdapter adapter = factory.createAsyncServiceAdapter("MyCorbaService");
// 3)サービスを開始する。
adapter.begin(null);
// 4)メソッドを呼び出す。
AsyncServiceID id0 = (AsyncServiceID)adapter.execute(null, "getType");
Object [] data = new Object[1];
data[0] = Integer.valueOf(1);
AsyncServiceID id1 = (AsyncServiceID)adapter.execute(data, "getPAddress");
// 5)結果を参照する。
Object result0 = adapter.getResult(id0);
Object result1 = adapter.getResult(id1);
// 結果の処理
if( result0 != null && result0 instanceOf AsyncServiceExecuteResult )
String str = ((AsyncServiceExecuteResult)result0).getValue();
...
}catch(AsyncServiceException ex) {
...
}finally{
try{
// 6)サービスを終了する。
adapter.end();
}catch(Exception ex){
...
}
}
}処理の手順は以下のようになります。
InitialFactoryクラスのcreateFactoryメソッドでAsyncServiceFactoryインタフェースを取得します。
AsyncServiceFactoryインタフェースのcreateAsyncServiceAdapterメソッドへasyncマップ(定義ファイル)に記載したサービス名を指定して、AsyncServiceAdapterインタフェースを取得します。
AsyncServiceAdapterインタフェースのbeginメソッドへ必要なパラメタを指定しサービスの初期化を行います。
AsyncServiceAdapterインタフェースのexecuteメソッドへ必要なパラメタを指定しサービスを呼び出します。
AsyncServiceAdapterインタフェースのgetResultメソッドへexecuteメソッドの戻り値をパラメタに指定しサービスの処理結果を取得します。処理結果は、利用するサービスにより、返却されるオブジェクトが異なります。
AsyncServiceAdapterインタフェースのendメソッドの呼び出しサービスを終了します。
上記の手順3、および、手順4で指定するパラメタは、利用するサービスアダプタにより、異なります。詳しくは、利用可能なアダプタの説明を参照してください。
ポイント
同期・非同期といった、アプリケーションの呼び出し方法をプログラムで指定することはありません。
アプリケーションの呼び出し方法は、asyncマップの定義により決まります。
注意
アプリケーションの呼び出し方法により、サービス要求(executeメソッド)の復帰タイミング、結果が返却されるタイミングが異なります。
AsyncServiceAdapter#getResultメソッドがnullを返却しても、AsyncServiceAdapter#hasResultメソッドがtrueを返す場合があります。これは、結果が返却されない、または、結果nullが返却された場合などに発生します。
結果を削除するには、次の方法があります。
removeResultメソッドの呼び出し
removeAllResultsメソッドの呼び出し
endメソッドの呼び出し
通知されたAsyncServiceEventのconsumeメソッドの呼び出し
結果を削除したあとでは、getResultメソッドなどにより、結果を取得することはできません。
処理中を示すAsyncServiceUnreceivedResultを削除したあとに、呼び出した処理の結果を受け取ることはできません。また、処理中を示すAsyncServiceUnreceivedResultを削除しても要求した処理を取り消すことにはなりません。