遠程接口采用Call-by-value 是傳值,傳值就要對參數(shù)進行copy,所以要求參數(shù)必須是可序列化,性能也比較低。因此參數(shù)在ejb內(nèi)部改變對外部對象沒有影響。
本地接口采用Call-by-reference 是傳引用,可以提高性能,不過這樣作,有可能改變參數(shù)的值,此時的參數(shù)可以是非序列化的
如果采用本地接口就必須采用Call-by-reference,不是可以,是必須
如果采用遠程接口,必須用Call-by-Value,但是調(diào)用關系完全在一個VM內(nèi)的時候,WebLogic可以優(yōu)化成Call-by-reference,這時后遠程調(diào)用就自動退化為本地調(diào)用,性能上有提高。那個警告就是說你禁止了這個優(yōu)化,可以不理。建議打開優(yōu)化提升性能。
如果開發(fā)的應用將web和ejb部署成一個ear文件,那么ejb和ejb之間的調(diào)用,web和ejb之間的調(diào)用都是采用Call-By-Reference的方式,能大大提高效率。
如果你不采用這種方式,那么你使用的是remote的方式,無論處于一個JVM中,都是采用Call-By-Value的方式調(diào)用的。
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>