ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド

12.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] = 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メソッドで特定のパラメタの値のみを参照することもできます。

結果は、サービスの呼び出し方法、および、状態により異なります。

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