Java RMI-IIOPを使用したHello World

j
BrokerはJava RMIを使用したCORBAインタフェースの作成をサポートします。 この機能を使用すると、Javaのみを操作することができ、IDLの知識と使用について心配する必要はありません。

この簡単な例によって、簡単な一時的オブジェクトサポートを使用したjBrokerでのJava CORBAプログラミングについて学習できます。 Java RMIはオブジェクトインタフェースを定義するために使用されます。


1 Hello RMIインタフェース

Hello Worldインタフェースは、Java RMIを使用して定義されます。
package helloWorld2;
                                                                           
public interface Hello extends java.rmi.Remote
{
    String sayHello() throws java.rmi.RemoteException;
}

2 Helloの実装

HelloImplは、Helloインタフェースを実装します。
package helloWorld2;
                                                                           
import java.rmi.RemoteException;
import javax.rmi.PortableRemoteObject;
                                                                           
public class HelloImpl extends PortableRemoteObject implements Hello
{
    public HelloImpl() throws RemoteException {}
                                                                           
    public String sayHello() throws RemoteException
    {
    |   return "Hello World!\n";
    }
}

3 Hello Worldサーバ

サーバはORBを作成し、Java RMIサーバントを作成し、その文字列化されたオブジェクト参照を書き出し、呼び出しを待ちます。 HelloImplはCORBAオブジェクトではないため(org.omg.CORBA.Objectを実装しません)、object_to_stringメソッドを使用する前にまずスタブ/オブジェクト参照を取得する必要があります。
package helloWorld2;
                                                                           
import util.Util;
                                                                           
import org.omg.CORBA.ORB;
import org.omg.CORBA.Object;
                                                                           
import javax.rmi.PortableRemoteObject;
                                                                           
public class helloServer
{
    public static void main(String[] args)
    {
    |   try {
    |   |                                                                  
    |   |   // create the jBroker ORB
    |   |   ORB orb = ORB.init(args, null);
    |   |                                                                  
    |   |   // create a servant
    |   |   Hello hello = new HelloImpl();
    |   |                                                                  
    |   |   // create a stringified object reference
    |   |   String helloIOR = orb.object_to_string((Object)
    |   |       PortableRemoteObject.toStub(hello));
    |   |                                                                  
    |   |   // write the stringified object reference
    |   |   Util.writeIOR(helloIOR, "ior", true);
    |   |                                                                  
    |   |   // wait for invocations
    |   |   System.out.println("waiting for invocations ...");
    |   |   orb.run();
    |   |                                                                  
    |   } catch (Exception ex) {
    |   |   ex.printStackTrace();
    |   }
    }
}

4 Hello Worldクライアント

クライアントはORBを作成し、Helloオブジェクトの文字列化されたオブジェクト参照を読み込み、Helloタイプにキャストし、それに対してsayHelloメソッドを呼び出します。
package helloWorld2;
                                                                           
import util.Util;
import org.omg.CORBA.ORB;
                                                                           
public class helloClient
{
    public static void main(String[] args)
    {
    |   try {
    |   |                                                                  
    |   |   // create the jBroker ORB
    |   |   ORB orb = ORB.init(args, null);
    |   |                                                                  
    |   |   // read the stringified object reference
    |   |   String helloIOR = Util.readIOR("ior");
    |   |                                                                  
    |   |   // narrow the stringified object
    |   |   Hello hello = (Hello) orb.string_to_object(helloIOR);
    |   |                                                                  
    |   |   // invoke method on the object
    |   |   System.out.println(hello.sayHello());
    |   |                                                                  
    |   } catch (Exception ex) {
    |   |   ex.printStackTrace();
    |   }
    }
}

注記: オブジェクトはマーシャル解除または文字列化解除されると、jBroker ORBは自動的に正しいスタブを見つけます。 結果として、javax.rmi.PortableRemoteObjectnarrowメソッドを使用する代わりに、Javaキャストを使用できます。 narrowメソッドの使用は、もちろん、標準的な方法です。たとえば、

Hello hello = (Hello) orb.string_to_object(helloIOR);
上は次に示すものにより置き換えられます。

Hello hello = (Hello) PortableRemoteObject.narrow(orb.string_to_object(
    helloIOR), Hello.class);
(適宜)

5 スタブおよびスケルトンの生成

上のいずれのコードも生成コードに依存していません。 ORBはマーシャルを実行し、ブローカーを要求するためにスタブおよびスケルトンを引き続き、必要とします。

スタブおよびスケルトンを生成するには、rmi2iiopコンパイラを使用します。 tt>rmi2iiopコンパイラは、コンパイルされたJavaクラスファイルで動作します。 リモートインタフェースの代わりにリモート実装に対してコンパイラを実行するのは一般的です。

rmi2iiop -keepgenerated -ds output -d ../../lib helloWorld2.HelloImpl
次のJavaクラスはhelloWorld2Javaパッケージで作成されます。
_Hello_Stub     // the Stub
_HelloImpl_Tie  // the delegation based Skeleton

Copyright © 2000-2003, Novell, Inc. All rights reserved.