天天看點

JAVA、CORBA版HelloWorld程式

開發環境:JDK1.5,Windows XP

實作步驟: A 編寫編譯IDL接口 B 編寫編譯服務端程式 C 編寫編譯用戶端程式 D 運作

實作詳解:

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) {

 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!