この簡単な例によって、単純な一時的オブジェクトサポートを使用したORBでの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; }
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"; } }
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(); | } } }
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(); | } } }
注記: オブジェクトがマーシャル解除または文字列化解除されると、ORBは自動的に正しいスタブを見つけます。結果として、javax.rmi.PortableRemoteObjectでnarrowメソッドを使用する代わりに、Javaキャストを使用できます。narrowメソッドの使用は、もちろん、標準的な方法です。たとえば、
という文字列は次に示す内容で置き換えられます。Hello hello = (Hello) orb.string_to_object(helloIOR);
(適宜)Hello hello = (Hello) PortableRemoteObject.narrow(orb.string_to_object( helloIOR), Hello.class);
スタブおよびスケルトンを生成するには、rmi2iiopコンパイラを実行します。rmi2iiopコンパイラは、コンパイルされたJavaクラスファイルで動作します。リモートインタフェースの代わりにリモート実装に対してコンパイラを実行するのは一般的です。
rmi2iiop -keepgenerated -ds gensrc -d ../../lib helloWorld2.HelloImpl次のJavaクラスはhelloWorld2Javaパッケージで作成されます。
_Hello_Stub // the Stub _HelloImpl_Tie // the delegation based Skeleton
Copyright © 2000-2003, Novell, Inc.All rights reserved. |