この簡単な例によって、単純な一時的オブジェクトサポートを使用した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. |