WebLogic RMI 编程(一)

使用 WebLogic RMI 编译器

以下部分描述 WebLogic RMI 编译器:


WebLogic RMI 编译器概述

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 编译器功能

以下部分提供有关此版本的 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 编译器的其他功能

WebLogic RMI 编译器的其他功能包括如下方面:

  • 远程方法的签名不需要引发 RemoteException。
  • 远程异常可映射到 RuntimeException。
  • 远程类也可以实现非远程接口。


WebLogic RMI 编译器选项

WebLogic RMI 编译器可接受 Java 编译器支持的任何选项,例如,可以将 -d /classes examples.hello.HelloImpl 添加到命令行的编译器选项中。可使用 Java 编译器支持的所有其他选项,并可将其直接传递到 Java 编译器中。

下表列出了 java weblogic.rmic 选项。请在 java weblogic.rmic 之后和远程类的名称之前输入这些选项。

$javaweblogic.rmic[options]<classes>...

WebLogic RMI 编译器选项
选项
描述
表 4-1
-help
打印选项的描述。
-version
打印版本信息。
-d <dir>
指定编译的目标(顶级)目录。
-dispatchPolicy <queueName>
指定服务在 WebLogic Server 中获取执行线程应使用的已配置执行队列。
-oneway
指定所有调用均为单向调用。
-idl
生成远程接口的 IDL。
-idlOverwrite
覆盖现有 IDL 文件。
-idlVerbose
显示 IDL 信息的详细信息。
-idlDirectory <idlDirectory>
指定将创建 IDL 文件的目录位置(默认值 = 当前目录)。
-idlFactories
生成值类型的工厂方法。
-idlNoValueTypes
防止生成值类型以及包含值类型的方法/特性。
-idlNoAbstractInterfaces
防止生成抽象接口以及包含抽象接口的方法/特性。
-idlStrict
生成符合 OMG 标准的 IDL。
-idlVisibroker
生成与 Visibroker 4.5 C++ 兼容的 IDL。
-idlOrbix
生成与 Orbix 2000 2.0 C++ 兼容的 IDL。
-iiopTie
使用 Sun 的 rmic 版本生成 CORBA 骨架。
-iiopSun
使用 Sun 的 rmic 版本生成 CORBA 存根控件。
-nontransactional
在进行 RMI 调用前挂起事务,并在调用完成后恢复事务。
-compiler <javac>
指定 Java 编译器。如果未指定,则将使用 -compilerclass 选项。
-compilerclass <com.sun.tools.javac.Main>
要调用的编译器类。
-clusterable
此群集特定的选项将服务标记为可群集化的(可由 WebLogic Server 群集中的多个服务器承载)。每个承载对象(或副本)绑定到公共名称下的命名服务。当服务存根控件为从命名服务检索时,它包含一个可感知副本的引用(维护副本的列表并执行副本之间的负载平衡和故障转移)。
-loadAlgorithm <algorithm>
仅供与 -clusterable 结合使用。指定服务特定的算法,供负载平衡和故障转移使用(默认 = weblogic.cluster.loadAlgorithm).必须为以下之一:循环法、随机或基于权数。
-callRouter <callRouterClass>
此与 -clusterable 结合使用的群集特定的选项指定将用于路由方法调用的类。此类必须实现 weblogic.rmi.cluster.CallRouter。如果指定,则在每个方法调用前将调用此类的实例,并可基于方法参数指定将路由至的服务器。此选项或者返回服务器名,或者返回 Null。Null 表示使用当前负载算法。
-stickToFirstServer
此与 -clusterable 结合使用的群集特定的选项可启用“粘滞”负载平衡。为第一个请求提供服务所选择的服务器将用于所有后续请求。
-methodsAreIdempotent
此与 -clusterable 结合使用的群集特定的选项表示此类上的方法是幂等的。这使存根控件能够尝试从任何通信故障中恢复,即使它不能确保故障出现在远程方法调用之前也可以。默认情况下(如果未使用此选项),存根控件仅对保证为在远程方法调用之前出现的故障进行重试。
-iiop
从服务器生成 IIOP 存根控件。
-iiopDirectory
指定将写入 IIOP 代理类的目录位置。
-timeout
remote-client-timeout 结合使用。
-commentary
发出注释。
-nomanglednames
导致编译器生成远程类特定的代理。
-g
将调试信息编译到类中。
-O
使用优化编译。
-nowarn
编译中不发出警告。
-verbose
编译时带有详细输出。
-verboseJavac
启用 Java 编译器详细输出。
-nowrite
防止生成 .class 文件。
-deprecation
对不赞成的调用提供警告。
-classpath <path>
指定要使用的类路径。
-J<option>
使用它将标志一直传递到 Java 运行时。
-keepgenerated
使您能够在运行 WebLogic RMI 编译器时保留生成的存根控件和骨架类文件的源代码。
-disableHotCodeGen
导致编译时编译器在骨架类中创建存根控件。

生成非复制的存根控件

也可以使用 weblogic.rmic 生成未在群集中复制的存根控件。这些存根控件又称为“固定”服务,因为当其注册后,将只能在其注册所在的主机可用,并且将不提供透明的故障转移或负载平衡。固定服务对整个群集可用,因为它们绑定到复制的群集范围的 JNDI 树。但是,如果承载固定服务的单个服务器出现故障,则客户端将无法故障转移到其他服务器。

使用持久性编译器选项

在部署期间,appc 和 ejbc 通过 RMI 编译器运行每个 EJB 容器类,用于创建动态生成存根控件和骨架所需的 RMI 描述符。使用 weblogic-ejb-jar.xml 文件以持久保存 iiop-security-descriptor 元素。有关详细信息,请参阅“WebLogic Enterprise JavaBean 编程”中的 2.1 weblogic-ejb-jar.xml 元素


你可能感兴趣的:(weblogic)