2011年(21)
分类: Java
2011-04-16 20:55:53
写一个CORBA程序的步骤:
1. 编写IDL接口定义文件(Hello.idl);
2. 将接口定义文件编译为相应高级语言源代码,产生服务器框架与客户端存根;
命令:idlj -fall Hello.idl (在Hello.idl所在的目录下),生成HelloApp文件夹,里面共包含6个java源文件,其中:
Hello.java本质上是一个接口,该接口含有IDL接口的Java版本,它扩展org.omg.CORBA.Object并提供标准的CORBA对象功能。
HelloPOA.java是服务器框架,为服务器提供基本的CORBA功能。
_HelloStub.java是客户机存根,为客户机提供CORBA功能,实现Hello.java接口。
HelloHelper.java是一个终态类,可以提供辅助功能,特别是提供将CORBA对象引用转换为适当类型所需的narrow()方法。
HelloHolder.java是一个终态类,其中含有Hello类型的公有实例成员。它可为“out”和“intout”变量提供操作。CORBA有这些变量,但不容易映射为Java的语义。
HelloOperations.java是一个接口类,其中含有sayHello()方法。
3.实现Hello接口。因为HelloPOA类是对Hello接口的一个抽象实现,因此Hello.java接口的实现类HelloImpl继承HeoolPOA.类。
4. 基于服务器框架,编写服务对象实现程序(HelloServer.java,放在HelloServer包中);
步骤:
① 创建一个 ORB 实例
② 创建一个HelloImpl实例(CORBA Hello对象的实现)并通知 ORB
③ 获取一个命名上下文的 CORBA 对象引用,在该命名上下文中注册新 CORBA 对象
④ 在命名上下文中将新对象注册在“Hello”名下
⑤ 等待对新对象的调用
5. 基于客户端存根,编写客户对象调用程序(HelloClient.java,放在HelloClient包中);
6. 步骤:
① 创建一个 ORB
② 获取一个指向命名上下文的引用
③ 在命名上下文中查找 "Hello" 并获得指向该 CORBA 对象的引用
④ 调用对象的 sayHello() 操作并打印结果
6. 分别编译客户对象和服务对象程序(用eclipse时,类文件已自动编译,放在bin目录下);
7. 运行服务对象和客户对象程序(在包所在的目录bin下,带包结构运行);
分别在HelloClient和HelloServer目录下建立HelloApp子目录,将..\bin\HelloApp目录中的 _HelloStub.class、 Hello.class、 HelloHelper.class、 HelloHolder.class、HelloOperations.class
复制到HelloClient\HelloApp目录下
将..\bin\HelloApp目录中的 _HelloImplBase.class、 Hello.class、HelloOperations.class
复制到HelloServer\HelloApp目录下
命令:
第一个控制台窗口:F:\workplace\cobra\bin\HelloServer>tnameserv -ORBInitialPort 1050
-----确保名字服务器处于运行状态。
第二个控制台窗口:F:\workplace\cobra\bin>java HelloServer.HelloServer -ORBInitialPort 1050
----- 启动 Hello 服务器。
第三个控制台窗口:F:\workplace\cobra\bin>java HelloClient.HelloClient -ORBInitialPort 1050
-----CORBA客户端调用CORBA服务。
注:(1)本地调用时,不需要用-ORBInitialHost参数来指定远程的IP地址。
Java HelloClient -ORBInitialHost IP Address -ORBInitialPort 1050 远程调用CORBA服务命令。
(2)端口可根据实际情况作修改。
源码见附件: