クライアント側ファイルを完成させる
クライアントプログラムに追加しなければならないコードは、プログラムが使用するバインド方式によって
異なります。
- クライアントが標準入力から IOR を読み取る場合、バインドコードは完成していて、
narrow() オペレーションをコーディングして、サーバー側メソッドを呼び出すことができます。
- クライアント側がファイルから IOR を読み取る場合は、ファイル名を追加する必要があります。
この処置を行なったら、narrow() オペレーションをコーディングして、サーバー側メソッドを呼び出すことができます。
- クライアントがネームサービスから IOR を読み取る場合は、ネームサービス resolve() オペレーションをコーディング
する必要があります。この処置を行なったら、
narrow() オペレーションをコーディングして、サーバー側メソッドを呼び出すことができます。
ネームサービス resolve() をコーディングする
クライアントクラスがネームサービスバインドを使用する場合、
生成されたコードには、lookup() オペレーションは含まれません。これをコーディングするためには、
サーバーがそれ自体をネームサービスにバインドする方法を知る必要があります。
このコードを生成するもっとも簡単な方法としては、ネームサービスブラウザを使用します。
このブラウザを使用すると、サーバーの IOR をネームサービスから読み取って、ルックアップコードを
生成できます。
- CORBA サーバープログラムを起動します。
- CORBAモジュールのネームサービスブラウザで、サーバープログラムが作成したサーバントインスタンスを
バインドするネームサービスにカーソルを置きます。
- ネームサービスノードを展開して、そのサーバントインスタンスを表すサブノードを表示します。
- サーバントインスタンスを表すノードを右クリックします。
コンテキストメニューから、「クライアントバインドコードをコピー」を選択します。
- 編集ウィンドウに切り替えます。編集ウィンドウでクライアントクラスが開いていなければなりません。
- 生成されたコードで次のコメントを見つけます。
// paste here code from Copy Client Code on Object Node in NamingService
Browser
- カーソルをこの行に下に挿入して、CTRL+V を押します。ネームサービスブラウザによって
生成されたコードがペーストされます。このコードは、次のようになります。
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() オペレーションを実行する必要があります。
- 生成されたクライアントファイルで、次のコメントを見つけます。
// Place narrowing of your object here.
// Something like: <interface> <name> = <class>Helper.narrow
(obj);
- このコードを、サーバントインスタンス用のクライアント側プロキシを作成するコードと置換します。次に例を示します。
hello helloProxy = helloHelper.narrow (obj);
- プロキシオブジェクトにサーバー側メソッドを呼び出すコードを追加します。次に例を示します。
System.out.println (helloProxy.sayHello(3));
最初の行は、プロキシを作成するものです。Hello は、IDL の Hello インタフェースから
生成された Java インタフェースです。ここでは、Java データ型として使用されています。
obj はネームサービスから返されたオブジェクトで、Hello 型にナロー変換 (キャスト) されます。
2 番目の行は、プロキシを使用して、sayHello() メソッドを呼び出します。
クライアントをコンパイルする
最後の手順では、クライアントに関連するすべてのクラスを、IDL ファイルも含めてコンパイルします。
パッケージのノードを右クリックして、コンテキストメニューから「コンパイル」を選択します
著作権と商標について