ページの先頭行へ戻る
Interstage Application Server V13.0.0 アプリケーション作成ガイド(CORBAサービス編)
FUJITSU Software

4.4.1 静的起動インタフェース

静的起動インタフェースを使用する場合の、クライアントアプリケーションの処理の流れを以下に示します。



4.4.1.1 初期化

CORBAの初期化メソッドCORBA::ORB_init()を呼び出し、初期化処理を行います。結果として、ORBのオブジェクトリファレンスが返されます。このオブジェクトリファレンスは、以降で呼び出すORBインタフェースを使用する場合に指定します。

main( int argc, char *argv[] ) 
{
    CORBA::ORB_ptr          orb;                   // ORBのオブジェクトリファレンス
    CORBA::Environment      env;                   // 例外情報
    int                     current_argc = argc; 

    env = new CORBA::Environment;                  // 例外情報
    orb = CORBA::ORB_init(current_argc, argv, FJ_OM_ORBid, env);

4.4.1.2 ネーミングサービスのオブジェクトリファレンスの獲得

実行するオブジェクトをネーミングサービスから検索するために、ネーミングサービスのオブジェクトリファレンスが必要となります。CORBAインタフェースのオブジェクトリファレンスの取出しメソッドCORBA::ORB::resolve_initial_references()によりネーミングサービスのオブジェクトリファレンスを取り出します。このとき、CORBA_ORB_ObjectId_NameServiceをメソッドのパラメタとして指定します。

// NamingServiceのオブジェクトリファレンスを獲得
CORBA::Object_ptr
obj = orb->resolve_initial_references( CORBA_ORB_ObjectId_NameService, env );

// NamingContextクラスへの変換
CosNaming::NamingContext_ptr
cos_naming = CosNaming::NamingContext::_narrow( obj );

4.4.1.3 サーバアプリケーションのオブジェクトリファレンスの獲得

ネーミングサービスのメソッドCosNaming::NamingContext::resolve()により、これから実行したいサーバアプリケーションのオブジェクトリファレンスを取り出します。検索するオブジェクト名を本メソッドのパラメタとして指定します。

CosNaming::Name            name;  // CosNaming::Nameのインスタンス
CORBA::Object_ptr          obj;   // サーバアプリケーションのオブジェクトリファレンス

name.length(1);
// オブジェクト名
name[0]->id = (const CORBA::Char *)"ODdemo::calculator";
// オブジェクトのタイプ
name[0]->kind = (const CORBA::Char *)"";

// サーバアプリケーションのオブジェクトリファレンスを獲得
obj = cos_naming-> resolve( name, env );

// ODdemo::calculatorクラスへの変換
ODdemo::calculator_ptr ap = ODdemo::calculator::_narrow( obj );

4.4.1.4 メソッドの呼出し

サーバプログラムのメソッドを呼び出します。メソッド名は、IDLで指定したモジュール名、インタフェース名、およびオペレーション名を、2つのコロン(::)でつなげた形式で指定します。この例では、ODdemo、calculator、calculateがそれにあたります。なお、メソッド呼出し時に、ネーミングサービスで求めたサーバアプリケーションのオブジェクトリファレンスとサーバプログラムで例外が発生した場合に例外情報を獲得するためにCORBA::Environment構造体を指定します。
なお、アプリケーションで使用可能なCORBAのデータ型については、“4.5 データ型に対するマッピング”を参照してください。

ODdemo::calculator::result    res;   // 復帰値
CORBA::Long                   a, b;  // パラメタ

a = 10; 
b = 5; 

// メソッドの呼出し
res = ap->calculate( a, b, *env );