对象请求代理服务的客户机端编程提示

每个因特网 InterORB 协议 (IIOP) 请求和响应交换都由客户机端 ORB 和服务器端 ORB 组成。对使用 IIOP 的任何应用程序进行正确编程,以便与客户机端对象请求代理 (ORB) 通信很重要。

以下技巧有助于您确保对使用 IIOP 来处理请求和响应交换的应用程序进行正确编程,以便与客户机端对象请求代理 (ORB) 通信。

初始引用服务的解决方案

客户机应用程序可以使用 ORBInitRef 和ORBDefaultInitRef 属性来配置 ORB 服务用来查找服务(如命名)的网络位置。设置时,这些属性包含在用于初始化 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 实例时,能够让您避免可能发生的非人为的不一致。

JNDI 方法:对于 Java EE 应用程序(包括企业 Bean、Java EE 客户机和 servlet),您可以通过创建 JNDI InitialContext 对象和查询 java:comp/ORB 名称下的 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 组件共享该对象。
避免故障 避免故障: 如果您要使用应用程序中的 WLM 功能和集群故障转移,那么必须使用 JNDI 方法。有关如何获取服务器集群中的 InitialContext 的信息,请参阅使用包含多个名称服务器地址的 CORBA 对象 URL 的示例(位于“通过设置提供程序 URL 属性获取初始上下文”主题中)。gotcha
CORBA 方法: 因为瘦客户机应用程序不运行在 Java EE 容器中,所以它们不能使用 JNDI 接口查询 ORB。在这种情况下,您可以使用 CORBA 编程接口获取 ORB 实例,按如下所示:
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 限制

由于性能原因,通常在 Java EE 应用程序中的组件间共享单个 ORB 实例才有意义。根据 Java EE 规范 V1.3 的要求,所有 Web 和 EJB 容器都在 JNDI 名称空间中提供 ORB 实例 java:comp/ORB。每个容器可以共享应用程序组件间的该实例,但不是必需共享。对于应用程序组件间的正确的隔离,应用程序代码必须遵守以下限制:
  • 不要调用 ORB 关闭或销毁方法
  • 不要调用 org.omg.CORBA_2_3.ORB 方法 register_value_factory 或 unregister_value_factory

另外,不要在不同的 Java EE 应用程序中的应用程序组件之间共享 ORB 实例。

必需使用与 IBM Developer Kit 一起提供的 rmic 和 idlj

此产品使用的 Java 运行时环境 (JRE) 包括 rmicidlj 工具。使用这些工具来生成 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 变量中。


指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rorb_orbprog
文件名:rorb_orbprog.html