Apcoordinator ユーザーズガイド
|
目次
|
11.3.1 CORBAサービスアダプタ
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] = new Integer(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 |
All Rights Reserved, Copyright © 富士通株式会社 2000-2005