Cos Namingを使用したHello World

この例では、RMI-IIOPを使用したHello Worldのクライアントおよびサーバの実装を再実行しますが、今回はディスクの文字列化されたオブジェクト参照を使用する代わりに、COSネームサービスを使用してhelloオブジェクト参照を発行し、取得します。

1 Helloサーバ

ここでサーバは最初に、パラメータとして"NameService"を持つORB.resolve_initial_referencesメソッドを使用して、ルートNamingContextを取得します。その後、Nameを作成し、オブジェクト参照をhelloオブジェクトに発行します。Hello Worldレッスンでは、CORBAオブジェクトを期待するAPIで使用するには、あらかじめhelloサーバントのスタブを取得する必要があることを学習しました。
package cosNaming;
                                                                           
import util.Util;
                                                                           
import helloWorld2.Hello;
import helloWorld2.HelloImpl;
                                                                           
import org.omg.CORBA.ORB;
import org.omg.CORBA.Object;
                                                                           
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContext;
import org.omg.CosNaming.NamingContextHelper;
                                                                           
import javax.rmi.PortableRemoteObject;
                                                                           
public class Server
{
    public static void main(String[] args)
    {
    |   try {
    |   |                                                                  
    |   |   // create the jBroker ORB
    |   |   ORB orb = ORB.init(args, null);
    |   |                                                                  
    |   |   // create a servant
    |   |   Hello hello = new HelloImpl();
    |   |                                                                  
    |   |   // get the root of the NameService
    |   |   NamingContext root = NamingContextHelper.narrow(
    |   |       orb.resolve_initial_references("NameService"));
    |   |                                                                  
    |   |   // publish the hello object reference
    |   |   NameComponent nc = new NameComponent("hello", "");
    |   |   NameComponent[] name = new NameComponent[] { nc };
    |   |   root.rebind(name, (Object) PortableRemoteObject.toStub(hello));
    |   |                                                                  
    |   |   // wait for invocations
    |   |   System.out.println("waiting for invocations ...");
    |   |   orb.run();
    |   |                                                                  
    |   } catch (Exception ex) {
    |   |   ex.printStackTrace();
    |   }
    }
}

2 Helloクライアント

このクライアントはルートNamingContextも取得し、名前を解決してオブジェクト参照を取り戻します。
package cosNaming;
                                                                           
import util.Util;
                                                                           
import helloWorld2.Hello;
                                                                           
import org.omg.CORBA.ORB;
                                                                           
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContext;
import org.omg.CosNaming.NamingContextHelper;
                                                                           
import javax.rmi.PortableRemoteObject;
                                                                           
public class Client
{
    public static void main(String[] args)
    {
    |   try {
    |   |                                                                  
    |   |   // create the jBroker ORB
    |   |   ORB orb = ORB.init(args, null);
    |   |                                                                  
    |   |   // get the root of the NameSpace
    |   |   NamingContext root = NamingContextHelper.narrow(
    |   |       orb.resolve_initial_references("NameService"));
    |   |                                                                  
    |   |   // get the hello object from the NameService
    |   |   NameComponent nc = new NameComponent("hello", "");
    |   |   NameComponent[] name = new NameComponent[] { nc };
    |   |   Hello hello = (Hello) root.resolve(name);
    |   |                                                                  
    |   |   // invoke method on the object
    |   |   System.out.println(hello.sayHello());
    |   |                                                                  
    |   } catch (Exception ex) {
    |   |   ex.printStackTrace();
    |   }
    }
}

3 Helloアプレットクライアント

package cosNaming;
                                                                           
import java.awt.Graphics;
                                                                           
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContext;
import org.omg.CosNaming.NamingContextHelper;
                                                                           
import helloWorld2.Hello;
                                                                           
public class helloApplet extends java.applet.Applet
{
    private String _message = "";
                                                                           
    public void init() {
    |   try {
    |   |                                                                  
    |   |   // create the jBroker ORB
    |   |   ORB orb = ORB.init(this, null);
    |   |                                                                  
    |   |   // get the root of the NameSpace
    |   |   NamingContext root = NamingContextHelper.narrow(
    |   |       orb.resolve_initial_references("NameService"));
    |   |                                                                  
    |   |   // get the hello object from the NameService
    |   |   NameComponent nc = new NameComponent("hello", "");
    |   |   NameComponent[] name = new NameComponent[] { nc };
    |   |   Hello hello = (Hello) root.resolve(name);
    |   |                                                                  
    |   |   // invoke method on the object
    |   |   _message = hello.sayHello();
    |   |                                                                  
    |   } catch (Exception ex) {
    |   |   ex.printStackTrace();
    |   }
    }
                                                                           
    public void paint(Graphics g)
    {
    |   g.drawString(_message, 25, 50);
    }
}
Copyright © 2000-2003, Novell, Inc.All rights reserved.