开发环境: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) { /* 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!