对象请求代理服务的客户机端编程提示
每个因特网 InterORB 协议 (IIOP) 请求和响应交换都由客户机端 ORB 和服务器端 ORB 组成。对使用 IIOP 的任何应用程序进行正确编程,以便与客户机端对象请求代理 (ORB) 通信很重要。
以下技巧有助于您确保对使用 IIOP 来处理请求和响应交换的应用程序进行正确编程,以便与客户机端对象请求代理 (ORB) 通信。
初始引用服务的解决方案
org.omg.CORBA.ORB.init(java.lang.String[] args,
java.util.Properties props)
您可以用客户机代码或命令行参数设置这些属性。可以通过使用多个 ORBInitRef 属性设置来指定多个服务位置(每个服务使用一个位置),但只能指定一个 ORBDefaultInitRef 值。有关 ORB 用于查找服务的这两个属性和优先顺序的更多信息,请阅读 CORBA/IIOP 规范。
用客户机代码分别进行设置的这些属性是 com.ibm.CORBA.ORBInitRef.service_name 和 com.ibm.CORBA.ORBDefaultInitRef。例如,要指定命名服务 (NameService) 位于端口 2809 上的 sample.server.com,那么要将 com.ibm.CORBA.ORBInitRef.NameService 属性设置为 corbaloc::sample.server.com:2809/NameService。
对于命令行参数设置,这些属性分别为 -ORBInitRef 和 -ORBDefaultInitRef。要找到先前指定的同一命名服务,请使用以下 Java 命令:
在为 ORB 支持的服务设置了这些属性后,Java Platform Enterprise Edition (Java EE) 应用程序可以调用 ORB 上的 resolve_initial_references 功能(如 CORBA/IIOP 规范中的定义)来获取对给定服务的初始引用。
用于获取 ORB 实例的首选 API
对于 Java EE 应用程序,您可以使用以下任何一种方法。 但是,强烈建议您使用 Java 命名和目录接口 (JNDI) 方法来确保在整个客户机应用程序中使用同一个 ORB 实例;当使用不同的 ORB 实例时,能够让您避免可能发生的非人为的不一致。
javax.naming.Context ctx = new javax.naming.InitialContext();
org.omg.CORBA.ORB orb =
(org.omg.CORBA.ORB)javax.rmi.PortableRemoteObject.narrow(ctx.lookup("java:comp/ORB"),
org.omg.CORBA.ORB.class);
使用 JNDI 获取的 ORB 实例是单独对象,运行在同一个 Java 虚拟机进程中的所有 Java EE 组件共享该对象。
java.util.Properties props = new java.util.Properties();
java.lang.String[] args = new java.lang.String[0];
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, props);
与 JNDI 方法相比,CORBA 规范要求在每次调用 ORB.init 方法时创建新的 ORB 实例。如果需要更改 ORB 缺省设置,那么可以将 ORB 属性设置添加到在 ORB.init 方法调用中传递的 Properties 对象。
不推荐使用 com.ibm.ejs.oa.EJSORB.getORBinstance 方法,但该方法在此产品的前发行版中是支持的。
在 Java EE 应用程序组件中共享 ORB 实例时的 API 限制
- 不要调用 ORB 关闭或销毁方法
- 不要调用 org.omg.CORBA_2_3.ORB 方法 register_value_factory 或 unregister_value_factory
另外,不要在不同的 Java EE 应用程序中的应用程序组件之间共享 ORB 实例。
必需使用与 IBM Developer Kit 一起提供的 rmic 和 idlj
此产品使用的 Java 运行时环境 (JRE) 包括 rmic 和 idlj 工具。使用这些工具来生成 CORBA/IIOP 协议的 Java 语言绑定。
在产品安装期间,这些工具将安装在 app_server_root/java/ibm_bin 目录中。Java Development Kit 的 $JAVA_HOME/bin 目录中(而非安装了此产品的 IBM Developer Kit)包含的这些工具的版本与此产品不兼容。
安装此产品时,$PATH 搜索顺序中包括 app_server_root/java/ibm_bin 目录以确保使用由 IBM 提供的 rmic 和 idlj 脚本。 因为这些脚本是在 app_server_root/java/ibm_bin 目录中,而不是在 JRE 标准 app_server_root/java/bin 目录中,所以当对不是由 IBM 提供的 JRE 进行维护时,您不可以覆盖这些脚本。
除 rmic 和 idlj 工具之外,JRE 还包括接口定义语言 (IDL) 文件。这些文件基于对象管理组 (OMG) 定义的内容,并可以被应用程序(它们需要所选 ORB 接口的 IDL 定义)使用。文件放置在 app_server_root/java/ibm_lib 目录中。
在使用 rmic 或 idlj 工具之前,请确保将 app_server_root/java/ibm_bin 目录包括在环境中的适当 PATH 变量搜索顺序中。如果应用程序使用了 app_server_root/java/ibm_lib 目录中的 IDL 文件,还需确保将此目录包括在 PATH 变量中。