JacORB中OAAdress属性与命名服务IP端口配置的区别
JacORB OAAddress 与命名服务IP端口的区别
你的现有配置代码
JacORB基础属性配置
Properties props = new Properties(); props.setProperty("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.setProperty("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); props.setProperty("jacorb.retries", "2"); props.setProperty("jacorb.retry_interval", "2"); org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, props);
命名服务连接配置
String ip = "...."; String port = "...."; String strNameService = "corbaloc::" + ip + ":" + port + "/NameService"; org.omg.CORBA.Object obj = orb.string_to_object(strNameService); NamingContextExt ns = NamingContextExtHelper.narrow(obj);
获取RootPOA的代码
org.omg.CORBA.Object rootPOAObj = orb.resolve_initial_references("RootPOA"); System.out.println("rootPOAObj:"+ rootPOAObj.toString()); POA rootPOA = (POA)POAHelper.narrow(rootPOAObj);
两者的核心区别
作用对象完全不同
- 命名服务IP端口:指向远程独立的命名服务进程的监听地址,用来让客户端定位并连接命名服务,实现远程对象的注册与查找,和本地ORB的内部组件(比如POA)无直接关联。
OAAddress:指定当前本地ORB实例自身的监听地址和端口,是ORB对外通信的端点,用于接收其他节点的回调请求,或是让ORB自身能正确初始化内部组件(如POA)。
使用场景差异
- 命名服务IP端口:仅在需要和命名服务交互时配置,是服务发现的入口。
OAAddress:当你的进程需要作为服务端接收请求,或ORB无法自动确定自身有效地址(比如多网卡环境、网络限制)时配置,它直接影响本地POA的初始化与可用性。
关联组件不同
- 命名服务IP端口关联CORBA的
NamingContext服务,属于服务发现层。 OAAddress关联本地ORB和POA组件,属于CORBA的通信与对象适配层。
- 命名服务IP端口关联CORBA的
关于RootPOA获取失败的说明
你遇到的resolve_initial_references("RootPOA")失败,通常是因为JacORB无法自动确定ORB的监听地址,导致POA组件初始化异常。此时配置OAAddress(格式为ip:port)可以强制指定ORB的通信端点,确保POA正常启动,进而能通过resolve_initial_references获取到引用。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

