使用java實現基於corba的helloworld

開發環境:JDK1.5,Windows XP

實現詳解:
1 編寫IDL接口HelloWorld.idl:
module sample{
       interface HelloWorld{
              string sayHello();
       };
};
2  編譯IDL接口:C:/xxf/aaron/study/corba>idlj –fall HelloWorld.idl
編譯結果生成sample包,生成下述文件
_HelloWorldStub.java
HelloWorld.java
HelloWorldHelper.java
HelloWorldHolder.java
HelloWorldOperations.java
HelloWorldPOA.java
 
3 編寫服務端程序:HelloWorldServer.java
import sample.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.CORBA.portable.*;
import org.omg.PortableServer.*;


class HelloWorldServant extends HelloWorldPOA {
    public String sayHello() {
        return "/nHello World!/n";
    }
}


public class HelloWorldServer {
    public static void main(String args[]) {
        try {
            //Initialize CORBA
            ORB orb = ORB.init(args, null);
            org.omg.CORBA.Object poaobj = orb.resolve_initial_references(
                    "RootPOA");
            org.omg.PortableServer.POA rootPOA = org.omg.PortableServer.
                                                 POAHelper.narrow(poaobj);
            org.omg.PortableServer.POAManager manager = rootPOA.the_POAManager();

            //New Servant
            HelloWorldServant objRef = new HelloWorldServant();
            HelloWorld obj = objRef._this(orb);

            //Binding
            NamingContext ncRef = NamingContextHelper.narrow(
                    orb.resolve_initial_references("NameService"));
            NameComponent nc = new NameComponent("HelloWorld", "");
            NameComponent path[] = {nc};
            ncRef.rebind(path, obj);

            //Run
            manager.activate();
            System.out.println("HelloWorld is running!");
            orb.run();
        } catch (Exception e) {
            System.err.println("ERROR: " + e);
            e.printStackTrace(System.out);
        }
    }
}
 
4 編寫客戶端程序: HelloWorldClient.java
import sample.*;
import org.omg.CosNaming.*;
import org.omg.CORBA.*;

public class HelloWorldClient {
    public static void main(String args[]) {
        try {
            ORB orb = ORB.init(args, null);
            org.omg.CORBA.Object objRef = orb.resolve_initial_references(
                    "NameService");
            NamingContext ncRef = NamingContextHelper.narrow(objRef);

            NameComponent nc = new NameComponent("HelloWorld", "");
            NameComponent path[] = {nc};
            HelloWorld helloWorld = HelloWorldHelper.narrow(ncRef.resolve(path));

            String hello = helloWorld.sayHello();
            System.out.println(hello);
        } catch (Exception e) {
 /*           System.out.println("ERROR : " + e);
            e.printStackTrace(System.out);*/
 e.printStackTrace();
        }
    }
}


5 運行
啓動名字服務器:C:/xxf/aaron/study/corba>tnameserv -ORBInitialPort 1050
啓動服務端程序:C:/xxf/aaron/study/corba>java HelloWorldServer -ORBInitialPort 1050
啓動客戶端程序:C:/xxf/aaron/study/corba>java HelloWorldClient -ORBInitialPort 1050
輸出:Hello World!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章