Apcoordinator ユーザーズガイド
目次 前ページ次ページ

第2部 Apcoordinatorコアの機能> 第11章 バックエンドとの連携> 11.3 利用可能なサービスアダプタ

11.3.1 CORBAサービスアダプタ

CORBAサービスと連携することができるサービスアダプタです。

AsyncServiceFactoryインタフェースで指定したサービス名が、asyncマップで定義したcorbaタグのname属性と一致する場合に、CORBAサービスを呼び出せるCORBAサービスアダプタを生成します。

注意

連携を行うCORBAサービスにより、コード変換処理や、連携を行う上の注意が必要な場合があります。
詳しくは、次のInterstageオンラインマニュアルを参照してください。

次は、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