クライアント側ファイルを完成させる

クライアントプログラムに追加しなければならないコードは、プログラムが使用するバインド方式によって 異なります。

ネームサービス resolve() をコーディングする

クライアントクラスがネームサービスバインドを使用する場合、 生成されたコードには、lookup() オペレーションは含まれません。これをコーディングするためには、 サーバーがそれ自体をネームサービスにバインドする方法を知る必要があります。 このコードを生成するもっとも簡単な方法としては、ネームサービスブラウザを使用します。 このブラウザを使用すると、サーバーの IOR をネームサービスから読み取って、ルックアップコードを 生成できます。
  1. CORBA サーバープログラムを起動します。
  2. CORBAモジュールのネームサービスブラウザで、サーバープログラムが作成したサーバントインスタンスを バインドするネームサービスにカーソルを置きます。
  3. ネームサービスノードを展開して、そのサーバントインスタンスを表すサブノードを表示します。
  4. サーバントインスタンスを表すノードを右クリックします。 コンテキストメニューから、「クライアントバインドコードをコピー」を選択します。
  5. 編集ウィンドウに切り替えます。編集ウィンドウでクライアントクラスが開いていなければなりません。
  6. 生成されたコードで次のコメントを見つけます。
    1. // paste here code from Copy Client Code on Object Node in NamingService Browser
  7. カーソルをこの行に下に挿入して、CTRL+V を押します。ネームサービスブラウザによって 生成されたコードがペーストされます。このコードは、次のようになります。
    1. String[] client_name_hierarchy = new String [] {"Forte4J", "Demo", "HelloWorldImpl", "Demo"};

narrow() をコーディングしてサーバー側メソッドを呼び出す

クライアントが使用するバインド方式に関係なく、この結果は、org.omg.CORBA という種類のオブジェクトになります。 オブジェクト「obj」は IOR を表します。たとえば、ファイルから IOR を読み取るクライアントには、 次のコードが含まれます。
org.omg.CORBA.Object obj = null;
       try {
           FileReader file = new java.io.FileReader("<file_name>");
            BufferedReader input = new java.io.BufferedReader(file);
            String target = input.readLine();
            input.close();
            obj = orb.string_to_object(target);
             ...
ネームサービスバインドを使用するクライアントでは、IOR は、 resolve() オペレーションによって取得されます。次に例を示します。
    org.omg.CORBA.Object obj = null;
            try {
                //
                // Resolve names with the Naming Service
                //
                // paste here code from Copy Client Code on Object Node in Naming Service Browser
        String[] client_name_hierarchy = new String [] {"Forte4J", "Demo", "HelloWorldImpl", "Demo"};
                NameComponent[] aName = new NameComponent[client_name_hierarchy.length / 2];
                for (int i=0; i<(client_name_hierarchy.length / 2); i++) {
                    aName[i] = new NameComponent();
                    aName[i].id = client_name_hierarchy[i*2];
                    aName[i].kind = client_name_hierarchy[i*2+1];
                }
                obj = nc.resolve (aName);
IOR を使用するには、サーバー側オブジェクト用のプロキシを返す narrow() オペレーションを実行する必要があります。
  1. 生成されたクライアントファイルで、次のコメントを見つけます。
    1. // Place narrowing of your object here.
      // Something like:  <interface> <name> = <class>Helper.narrow (obj);
  2. このコードを、サーバントインスタンス用のクライアント側プロキシを作成するコードと置換します。次に例を示します。
    1.  
      hello helloProxy = helloHelper.narrow (obj);
  3. プロキシオブジェクトにサーバー側メソッドを呼び出すコードを追加します。次に例を示します。
    1.  
      System.out.println (helloProxy.sayHello(3));
最初の行は、プロキシを作成するものです。Hello は、IDL の Hello インタフェースから 生成された Java インタフェースです。ここでは、Java データ型として使用されています。 obj はネームサービスから返されたオブジェクトで、Hello 型にナロー変換 (キャスト) されます。 2 番目の行は、プロキシを使用して、sayHello() メソッドを呼び出します。

クライアントをコンパイルする

最後の手順では、クライアントに関連するすべてのクラスを、IDL ファイルも含めてコンパイルします。 パッケージのノードを右クリックして、コンテキストメニューから「コンパイル」を選択します

著作権と商標について