远程接口采用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>