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を削除しても要求した処理を取り消すことにはなりません。