corba实例

corba实例1 编写 idl 程序 主要是希望完成什么功能 nbsp moduleHelloA interfaceHel stringsayHel stringsayBye onewayvoidsh

1.编写idl程序,主要是希望完成什么功能。

 

module HelloApp{ interface Hello{ string sayHello(); string sayBye(); oneway void shutdown(); }; }; 

 进入cmd进行编译:idlj -fall HelloApp.idl,会生成HelloApp文件夹。

 

2.在Eclipse建立服务器端server_project。

  需要下载包:http://www.jacorb.org/releases/2.3.1/jacorb-2.3.1-bin.zip

  解压后需要:avalon_framework.jar,jacorb.jar,logkit.jar

  第一步骤生成的程序拷贝到项目中。

   a.实现功能

 

package com.corba; import org.omg.CORBA.ORB; import HelloApp.HelloPOA; public class HelloImpl extends HelloPOA{ private ORB orb; public void setOrb(ORB orb) { this.orb = orb; } public String sayHello() { return "Hello ganliang!"; } public void shutdown() { orb.shutdown(false); } @Override public String sayBye() { return "Bye ganliang"; } } 

 b.建立伺服器

 

  package com.corba;

 import java.util.Properties; import org.omg.CORBA.ORB; import org.omg.PortableServer.IdAssignmentPolicyValue; import org.omg.PortableServer.LifespanPolicyValue; import org.omg.PortableServer.POA; import org.omg.PortableServer.POAHelper; import org.omg.PortableServer.ServantRetentionPolicyValue; public class HelloServer { //持久化的POA private static POA persistentPOA = null; public static void main(String[] args) { //生成一个对象请求代理(ORB),并初始化 Properties props = new Properties(); //使用jacorb的CORBA实现方案 props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); //使用持久化IOR,必须指定持久化POA的实现名称,默认是"StandardImplName", //可以随便指定 props.put("jacorb.implname", "StandardImplName"); //这里是指定CORBA服务器端端口为固定端口,是CORBA的IOR固定不变的关键 props.put("OAPort", "12500"); //如果需要指定服务器端的ip地址,则需要使用下面这种方式,默认使用上面的方式//只指定端口即可,ip地址是服务器端程序所在机器的ip,注意这两种只能二选其一 props.put("OAAddress", "iiop://192.168.10.4:10501"); try{ //创建ORB实例 ORB orb = ORB.init(args, props); //得到一个 RootPOA引用 POA rootPoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); //指定创建持久化POA的策略,使用持久化POA必须指定以下三种策略 org.omg.CORBA.Policy[] policies = new org.omg.CORBA.Policy[3]; //POA生命周期是持久化 policies[0] = rootPoa.create_lifespan_policy(LifespanPolicyValue.PERSISTENT); //CORBA对象的标识符是用户指定的 policies[1] = rootPoa.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID); //每次接到一个请求时,POA期望应用程序提供目标对象标识符作为 //查找伺服程序的索引 policies[2] = rootPoa.create_servant_retention_policy(ServantRetentionPolicyValue.RETAIN); //创建持久化的POA persistentPOA = rootPoa.create_POA("PersistentPOA", rootPoa.the_POAManager(), policies); //清除策略 policies[0].destroy(); policies[1].destroy(); policies[2].destroy(); policies = null; //创建伺服程序并注册到ORB上 HelloImpl helloImpl = new HelloImpl(); helloImpl.setOrb(orb); //创建伺服程序标识符,因为使用IdAssignmentPolicyValue.USER_ID //策略,所有必须要指定伺服程序id byte[] servantId = "MyHelloImpl".getBytes(); //将伺服程序标识符和服务器端CORBA对象关联起来并激活 persistentPOA.activate_object_with_id(servantId, helloImpl); //激活POAManager rootPoa.the_POAManager().activate(); //通过持久化POA获取CORBA对象 org.omg.CORBA.Object ref = persistentPOA.servant_to_reference(helloImpl); //打印CORBA对象的IOR System.out.println("CORBA IOR is:" + orb.object_to_string(ref)); System.out.println("HelloServer ready and waiting..."); //启动线程服务,等待调用 orb.run(); }catch(Exception e){ System.out.println("HelloServer occur error:" + e); e.printStackTrace(System.out); } System.out.println("HelloServer exiting ..."); } } 

 运行此程序,注意生成的IOR 长串。以供客户端用。

 

2.在Eclipse建立客户端client_project。

同样需要第一步骤生成的文件拷贝进项目import org.omg.CORBA.ORB;

 

 import org.omg.CORBA.ORB; import HelloApp.Hello; import HelloApp.HelloHelper; public class HelloClient { static Hello hello; public static void main(String[] args) { try { // 创建一个ORB实例 ORB orb = ORB.init(args, null); // 直接通过IOR向CORBA获取目标对象,IOR是服务器端生成的(自己实现时,第一次需要//拷贝服务器端生成的IOR),因为是固定不变的IOR,因为这里可以直接硬编码写死 hello = HelloHelper.narrow(orb.string_to_object("IOR:00000000000000C3A48656C6C6FF48656C6C6F3A312E0000005C0000DEE31302E000002AED706C4E616D652FE74504F412F4DC6C6F496D706C0000000000000000A")); // 调用接口对象的方法 System.out.println("Get hello object from corba server:" + hello); System.out.println(hello.sayHello()); System.out.println(hello.sayBye()); //关闭CORBA服务 //hello.shutdown(); } catch (Exception e) { System.out.println("HelloClient occur error:" + e); e.printStackTrace(System.out); } } }

 

启动服务气端,运行客户端。

 



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178652.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午4:47
下一篇 2026年3月26日 下午4:48


相关推荐

  • 深入理解 HashMap

    深入理解 HashMap什么是HashMap?​ HashMap是基于哈希表的Map接口是实现的。此实现提供所有可选操作,并允许使用null做为值(key)和键(value)。HashMap不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现假定哈希函数将元素适当的分布在各个桶之间,可作为基本操作(get和put)提供稳定的性能。在jdk1.7中的HashMap是基于数组+链表实现的,在jdk1….

    2025年10月19日
    8
  • 自监督学习: 人工智能的未来

    自监督学习: 人工智能的未来目录1.什么是自监督学习?2.为什么自监督学习是AI的未来?3.1ComputerVision:[1]2015(ICCV)UnsupervisedLearningofVisualRepresentationsUsingVideos[2]2015(ICCV)UnsupervisedVisualRepresentationLearningbyContextPrediction[3]2016(ECCV)Unsupervisedlearni

    2025年11月17日
    7
  • 几张系统图_一共有几个系统

    几张系统图_一共有几个系统几张系统图

    2022年4月21日
    81
  • weka中文论坛

    weka中文论坛

    2021年8月15日
    92
  • jdbc fetchsize_jdbc和odbc的关系

    jdbc fetchsize_jdbc和odbc的关系DBUtilscommons-dbutils是Apache组织提供的一个开源JDBC工具类库,封装了针对于数据库的增删改查操作APIQueryRunnerResulSetHandlerDbutils插入举例Connection conn = null; try { QueryRunner runner = new QueryRunner(); conn = JBBCUtils.getConnections3();

    2022年8月8日
    7
  • Linux 重启网络服务__2018.07.28[通俗易懂]

    Linux 重启网络服务__2018.07.28[通俗易懂]使用minicom软件开发串口进入minicom:    sudominicom 设置PC机的静态IP地址:   sudovim/etc/network/interfaces    autoeth0   ifaceeth0inetstatic   address192.168.1.30   netmask255.255.255.0   gat…

    2022年10月20日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号