Call-by-reference and Call-by-value

来源:互联网 发布:python运维自动化 编辑:程序博客网 时间:2024/04/29 04:14

远程接口采用Call-by-value 是传值,传值就要对参数进行copy,所以要求参数必须是可序列化,性能也比较低。因此参数在ejb内部改变对外部对象没有影响。

本地接口采用Call-by-reference 是传引用,可以提高性能,不过这样作,有可能改变参数的值,此时的参数可以是非序列化的

如果采用本地接口就必须采用Call-by-reference,不是可以,是必须
如果采用远程接口,必须用Call-by-Value,但是调用关系完全在一个VM内的时候,WebLogic可以优化成Call-by-reference,这时后远程调用就自动退化为本地调用,性能上有提高。那个警告就是说你禁止了这个优化,可以不理。建议打开优化提升性能。

如果开发的应用将web和ejb部署成一个ear文件,那么ejb和ejb之间的调用,web和ejb之间的调用都是采用Call-By-Reference的方式,能大大提高效率。
如果你不采用这种方式,那么你使用的是remote的方式,无论处于一个JVM中,都是采用Call-By-Value的方式调用的。

1。可以使用call-by-reference的条件,必须在同一个application中。


2。call-by-reference的设置,在weblogic.xml中

<weblogic-enterprise-bean>
     <entity-descriptor>
          <ejb-name>testBean</ejb-name>
          ...
          <enable-call-by-reference>True</enable-call-by-reference>
     </entity-descriptor>
</weblogic-enterprise-bean>

原创粉丝点击