WebLogic RMI 编译器 (weblogic.rmic
) 是一个用于生成和编译远程对象的命令行实用工具。使用 weblogic.rmic
为应用程序中的自定义远程对象接口生成客户端上的动态代理,并为服务器端对象提供热代码生成。
只需为可群集客户端或 IIOP 客户端显式运行 weblogic.rmic。通过为客户端提供使用 Internet ORB 互联协议(Internet Inter-ORB Protocol,简称 IIOP)访问 RMI 远程对象的能力,WebLogic IIOP 上的 RMI 扩展了 RMI 编程模型。请参阅使用 IIOP 上的 RMI。
以下部分提供有关此版本的 WebLogic RMI 编译器的功能的信息:
运行 rmic
时,需使用 WebLogic Server 的热代码生成功能自动在内存中生成服务器类的字节代码。此字节代码是根据需要为远程对象动态生成的。运行 weblogic.rmic
时,WebLogic Server 不再生成对象的骨架类。
热代码生成可为处理客户端上来自动态代理的请求的服务器端类创建字节代码。动态创建的字节代码可对客户端请求取消序列化,并针对实现类执行这些请求,将结果序列化并将其发送回客户端上的代理。类的实现绑定到 WebLogic Server 中的 WebLogic RMI 注册表中的一个名称。
WebLogic RMI 编译器的默认行为是为远程接口生成代理,并使远程类可以共享此代理。代理是远程对象的客户端使用的类。对于 RMI 的情况,将使用动态生成的字节代码和代理类。
例如,example.hello.HelloImpl 和 counter.example.CiaoImpl 用一个代理(与远程对象实现的远程接口相匹配的代理,在此情况下,应为 example.hello.Hello)类和字节代码表示。
远程对象实现多个接口时,代理名和包由接口集的编码确定。可使用 WebLogic RMI 编译器选项 –nomanglednames 替换此默认行为,这将使编译器生成远程类特定的代理。在存在类特定的代理时,它优先于接口特定的代理。
此外,使用 WebLogic RMI 代理类,代理不是最终的。对共存的远程对象的引用是对对象本身的引用,而不是对代理的引用。
动态代理类是传递到客户端的可序列化的类。客户端通过在 WebLogic RMI 注册表中查找类,可获取此类的代理。客户端调用代理上的方法(如同对本地类的调用),代理将请求序列化并将其发送到 WebLogic Server。
WebLogic RMI 编译器可接受 Java 编译器支持的任何选项,例如,可以将 -d /classes examples.hello.HelloImpl 添加到命令行的编译器选项中。可使用 Java 编译器支持的所有其他选项,并可将其直接传递到 Java 编译器中。
下表列出了 java weblogic.rmic 选项。请在 java weblogic.rmic 之后和远程类的名称之前输入这些选项。
$javaweblogic.rmic[options]<classes>...
也可以使用 weblogic.rmic
生成未在群集中复制的存根控件。这些存根控件又称为“固定”服务,因为当其注册后,将只能在其注册所在的主机可用,并且将不提供透明的故障转移或负载平衡。固定服务对整个群集可用,因为它们绑定到复制的群集范围的 JNDI 树。但是,如果承载固定服务的单个服务器出现故障,则客户端将无法故障转移到其他服务器。
在部署期间,appc 和 ejbc 通过 RMI 编译器运行每个 EJB 容器类,用于创建动态生成存根控件和骨架所需的 RMI 描述符。使用 weblogic-ejb-jar.xml
文件以持久保存 iiop-security-descriptor
元素。有关详细信息,请参阅“WebLogic Enterprise JavaBean 编程”中的 2.1 weblogic-ejb-jar.xml 元素。