CORBAサービスと連携することができるサービスアダプタです。
AsyncServiceFactoryインタフェースで指定したサービス名が、asyncマップで定義したcorbaタグのname属性と一致する場合に、CORBAサービスを呼び出せるCORBAサービスアダプタを生成します。
注意
連携を行うCORBAサービスにより、コード変換処理や、連携を行う上の注意が必要な場合があります。
詳しくは、次のInterstageオンラインマニュアルを参照してください。
Interstage Application Server OLTPサーバ運用ガイド
Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)
次は、MyCorbaService.idlというIDLの定義例です。
module mypkg { interface MyCorbaService { string getPrivateAddress(in long target); long getType(); string exercise(in string str1, inout string str2, out string str3); }; };
次は、MyCorbaServiceというサービス名のCORBAサービスを直接呼び出しするasyncマップの定義例です。
<asyncMap> <corba name="MyCorbaService" jndi="MyCorbaJndi" helper="mypkg.MyCorbaServiceHelper"> <method name="getPAddress" methodName="getPrivateAddress"> <type>int</type> </method> <method name="getType" methodName="getType"/> <method name="exercise" methodName=" exercise"> <type mode="in">java.lang.String</type> <type mode="inout">org.omg.CORBA.StringHolder</type> <type mode="out">org.omg.CORBA.StringHolder</type> </method> </corba> <jndi name="MyCorbaJndi" objectName="corbaAppPkg::MyCorbaService"/>
次は、上記asyncマップのサービスを利用するプログラム例です。
AsyncServiceFactory factory = (AsyncServiceFactory)InitialFactory.createFactory(context, InitialFactory.ASYNCSERVICEFACTORY); // name属性が"MyCorbaService"のcorbaタグを参照しサービスアダプタインスタンスを生成する。 AsyncServiceAdapter adapter = factory.createAsyncServiceAdapter("MyCorbaService"); adapter.begin(null); // corbaタグのコンテントより、methodタグで定義されているgetTypeメソッドを呼び出す。 AsyncServiceID id0 = adapter.execute(null, "getType"); // 結果を参照する。 Object result0 = adapter.getResult(id0); Integer type=null; if( result0 != null && result0 instanceOf AsyncServiceCORBAResult ) // 結果は呼び出したCORBAアプリケーションが返すオブジェクトです。 type = (Integer)((AsyncServiceCORBAResult)result0).getValue(); ...
beginメソッド
本メソッドで呼び出すCORBAアプリケーションオブジェクトを生成します。
引数へ初期化済みのorg.omg.CORBA.ORBオブジェクトを指定します。nullを指定した場合には、アプリケーションに共通なORBを利用します。
executeメソッド
CORBAアプリケーションを実行します。
以下にexecuteメソッドの例を示します。
// 引数のない getType メソッドを実行する場合 AsyncServiceID id0 = adapter.execute(null, "getType"); // inモードのint型引数を渡す getPAdressメソッドを実行する場合 Object [] data1 = new Object[1]; data1[0] = Integer.valueOf(1); AsyncServiceID id1 = adapter.execute(data1, "getPAddress"); // 各モードの引数を渡す exercise メソッドを実行する場合 Object [] data2 = new Object[3]; data2[0] = "hello "; data2[1] = "world"; // StringHolderクラスのvalue変数に渡す値を指定する data2[2] = null; // outモードの引数はnullを指定する AsyncServiceID id2 = adapter.execute(data2, " exercise");
第一引数(dataパラメタ)
メソッドへ指定するパラメタを配列の先頭より、パラメタの順に値を格納します。
プリミティブ型のパラメタを指定する場合は、プリミティブな型をラップするオブジェクトにより指定します。
inoutモードのパラメタを指定する場合は、ホルダークラスのvalue変数に渡す値を指定します。また、outモードのパラメタを指定する場合はnullを指定します。
第二引数(parameterパラメタ)
呼び出すメソッドを指定します。
getResultメソッド
CORBAアプリケーションの結果を参照します。
以下にgetResultメソッドの利用例を示します。
// int型を返す getTypeメソッドの実行結果を参照する場合 Object result0 = adapter.getResult(id0); Integer type = null; if( result0 != null && result0 instanceOf AsyncServiceCORBAResult ) { // 結果は呼び出したCORBAアプリケーションが返すオブジェクトです。 type = (Integer)((AsyncServiceCORBAResult)result0).getValue(); } // 各モードのパラメタを渡す exercise メソッドのパラメタを参照する場合 Object result2 = adapter.getResult(id2); String str0 = null, str1 = null; if( result2 != null && result2 instanceOf AsyncServiceCORBAResult ){ // getArgsメソッドはパラメタの値を宣言順に格納した配列を返します。 args = ((AsyncServiceCORBAResult)result0).getArgs(); str0 = (String)args[0]; // 1番目のパラメタを参照(inモードのためnull) str1 = (String)args[1]; // 2番目のパラメタを参照 str2 = (String)args[2]; // 3番目のパラメタを参照 }
メソッドの戻り値を参照するには、AsyncServiceCORBAResultクラスのgetValueメソッドを使用します。
戻り値がvoid型の場合はnullを返します。また、値がプリミティブな型の場合、プリミティブな型をラップするオブジェクトを返します。
メソッドのパラメタの値を参照するには、getArgsメソッドを使用します。
getArgsメソッドはパラメタの宣言順に値を格納した配列を返します。inモードの場合は、nullが格納されます。inoutモードまたはoutモードの場合は、ホルダークラスに格納されたvalue変数の値が格納されます。また、値がプリミティブな型の場合、プリミティブな型をラップするオブジェクトが格納されます。
getArgメソッドで特定のパラメタの値のみを参照することもできます。
結果は、サービスの呼び出し方法、および、状態により異なります。
直接呼出し
AsyncServiceCORBAResultが返ります。
同期変換
AsyncServiceCORBAResultが返ります。
突き放し
nullが返ります。
突き合せ(結果待ち合わせ中)
AsyncServiceUnreceivedResultが返ります。
突き合せ(結果受け取り後)
AsyncServiceCORBAResultが返ります。
AsyncServiceResultListener
突き合せによる呼び出しを行なう場合に、AsyncServiceResultListenerを設定することにより、結果を受け取ることが可能です。
listenerへは、AsyncServiceResultEventが通知されます。通知イベントのgetValueメソッドにより得られるオブジェクトは、AsyncServiceCORBAResultです。
プリミティブな型をラップするオブジェクト
executeメソッドや、getResultメソッドで利用するプリミティブな型と、プリミティブ型をラップするオブジェクトは、次のように対応します。
Javaのプリミティブ型 | ラッピングするオブジェクト |
---|---|
boolean | java.lang.Boolean |
byte | java.lang.Byte |
char | java.lang.Character |
double | java.lang.Double |
float | java.lang.Float |
int | java.lang.Integer |
long | java.lang.Long |
short | java.lang.Short |