Эффект включения вызова по ссылке - PullRequest
13 голосов
/ 06 июня 2011

Я получаю сообщения

<Warning> <EJB> <BEA-010202> <Call-by-reference is not enabled for the EJB 'myEjb'.
The server will have better performance if it is enabled. To enable call-by-reference, set the enable-call-by-reference element to True in the weblogic-ejb-jar.xml deployment descriptor or corresponding annotation for this EJB.>

и

<Warning> <EJB> <BEA-012035> <The Remote interface method: 'public abstract java.util.Collection my.sessionfassade.ejb.myFassade.myMethod(java.lang.String,java.lang.String,java.util.Collection) throws my.Exception' in EJB 'myEjb' contains a parameter of type: 'java.util.Collection' which is not Serializable. Though the EJB 'myEjb' has call-by-reference set to false, this parameter is not Serializable and hence will be passed by reference. A parameter can be passed using call-by-value only if the parameter type is Serializable.>

Почему бы это не было включено по умолчанию, поскольку удаленные вызовы все еще возможны и выполняются по значению, если флаг установлен в True? Есть ли негативный эффект при установке значения True?

1 Ответ

13 голосов
/ 07 июня 2011

call-by-reference = true не соответствует спецификации EJB.

Целью удаленных EJB-компонентов было обеспечение прозрачности местоположения.Другими словами, если целевой EJB находится в другой JVM, то очевидно, что данные должны каким-то образом копироваться в эту JVM, поэтому для согласованности также копируются вызовы EJB в той же JVM.Если вызовы EJB в той же JVM не были скопированы, то вызывающий / вызываемый не будет знать, например, нужно ли им защищенно копировать ArrayList.Всегда копируя, эта неоднозначность устраняется, но за счет производительности.

Если вы можете полностью доверять всем клиентам и EJB-компонентам в одной JVM и при необходимости установить соглашение для копирования данных, то вы можете включить вызов-by-reference = true.

...