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