[转载]最佳实践: 如果 EJB 和 Servlet 在同一个 JVM 中,则使用“引用传递”

最佳实践: 如果 EJB 和 Servlet 在同一个 JVM 中,则使用“引用传递”


当 EJB 和其它应用程序组件在同一个 JVM 中时,使用“引用传递”调用语义避免了 RMI-IIOp 开销。EJB 1.1 规范声明方法调用是“值传递”。这意味着对于每个远程方法调用,在调用之前,先要将参数复制到堆栈上。然而,这种操作花费很大。通过指定“引用传递”,无 需进行复制就可以传递原始对象引用。这样,就会导致极大的性能改进。

读者: 开发人员,架构设计师

产品: WebSphere Application Server

版本: 3.0.2.x、3.5.x 和 4.0

平台: 全部

关键字: Servlet、JSp 和 EJB、引用传递(pass by Reference)、值传递(pass by Value)、RMI-IIOp、JVM

摘要

当 EJB 和其它应用程序组件在同一个 JVM 中时,使用“引用传递”调用语义避免了 RMI-IIOp 开销。EJB 1.1 规范声明方法调用是“值传递”。 这意味着对于每个远程方法调用,在调用之前,先要将参数复制到堆栈上。 然而,这种操作花费很大。通过指定“引用传递”,无需进行复制就可以传递原始对象引用。 这样,就会导致极大的性能改进。

建议

因为 EJB 本身是位置无关的,所以它们使用远程编程模型。方法参数和返回值是在 RMI-IIOp 上序列化的, 并且是通过值返回的。这就是 RMI“值调用”(Call By Value)模型的精髓所在。

WebSphere 为在同一个应用程序服务器 JVM 中运行的 EJB 和客户机(通常是 servlet)提供了“无本地复制(No Local Copies)”的性能优化。“无本地复制”选项使用“引用传递”,并且当客户机和远程对象都在同一个进程中时,不会为已调用的对象创建本地代理。根据工作负载,这会导致极大的开销节省。
要在 WebSphere 高级版,版本 3.0.2 和 3.5.x 中设置“引用传递”, 需要在 WebSphere Admin Console 中,将下面两个命令行参数添加到 Application Server 的 Java 命令行参数上:

-Djavax.rmi.CORBA.UtilClass=com.ibm.CORBA.iiop.Util -Dcom.ibm.CORBA.iiop.noLocalCopies=true

要在 WebSphere 高级版,版本 4.0 中设置“引用传递”,请完成下列步骤:

单击正在调试 Object Request Broker 的应用程序服务器中的 Services选项卡。 单击 Advanced选项卡。 选中 pass by Reference,然后单击 OK 单击 Apply以保存更改。 停止并重新启动该应用程序服务器。

注意:“无本地复制”配置选项是通过把在同一个 JVM 中的客户机和 EJB 的“值传递”更改为“引用传递”来改进性能的。 这样做的另一个作用是,实际上可由所调用的企业 bean 更改 Java 对象派生的(非原始的)方法参数。请参考下列代码:

“引用传递”的另一个作用

class SomeClass {
RemoteObjectHome myRemoteHome;
RemoteObject myRemoteObject;
parameterObject myArgument;
void someMethod() {
myRemoteObject = myRemoteHome.create();
myArgument.setproperty("Before");
String newproperty = myRemoteObject.someRemoteMethod(myArgument);
// Both String newproperty and paremeterObject myArgument
// have been changed with the "Call By Reference"
}
}
class RemoteObjectBean implements SessionBean {
public String someRemoteMethod(paramterObject aparameter) {
if (aparameter.getproperty().equals("Before")) {
aparameter.setproperty("After");
}
return aparameter.getproperty();
}
}
应被取代的方法

缺省设置是“值传递”, “引用传递”是仅当非原始对象类型作为参数传递时,且 EJB 客户机和 EJB 服务器安装在同一个 WebSphere Application Server 中时才可有效改进性能,这一点很重要。 而简单类型,如整数和浮点型,是不管什么样的调用模型都会被复制的。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130500/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/374079/viewspace-130500/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值