2015-06-02 4 views
1

У меня есть удаленный ejb, который принимает объект. Он изменяет данные в этом объекте с использованием методов setter. В клиенте я напечатал значение с помощью метода геттера и заметил, что значение изменилось.Изоляция параметра метода ejb

Однако в документации here указано, что параметры выделены. Может кто-нибудь объяснить?

@Remote 
public class RemoteServiceBean { 

    public Student parameterIsolationTest(final Student student) { 

     student.setName("modified"); 

     return student; 
    } 
} 

public class MyClient { 

    public static void main(String arg...) { 

     .... 
     Student student = new Student(); 
     student.setName("Krishna"); 
     remoteService.parameterIsolationTest(student); 
     System.out.println(student.getName()); // prints modified 
    } 
} 

ответ

1

Боб на стороне сервера работает с объектами Java, существующими в JVM сервера. Клиент имеет другую JVM и, следовательно, другой набор объектов. Когда вы выполняете удаленные вызовы EJB, эти объекты должны быть «переданы» каким-то образом клиенту и обратно. Дело в том, что эта передача происходит только во время вызовов EJB. Поэтому, если ваш клиент вызывает сеттер в EJB, другой объект будет отправлен на сервер, но если клиент впоследствии изменяет этот объект (не вызывая ничего из компонента EJB), объект клиента НЕ будет передан на сервер - сервер не будет знать, что клиент изменил объект.

Если я понимаю ваш сценарий, вы вызываете сеттер на EJB, а затем получателя для того же свойства. Сеттеры и получатели - оба метода EJB, поэтому это будет включать вызовы EJB, и изменения, которые вы делаете с клиентом, будут распространяться на сервер в этом случае.

+0

Я обновил свой вопрос. –

+0

Правильно, вы создаете объект, передаете его на вызов EJB, вызов EJB изменяет объект, и поскольку это происходит как прямой результат вызова EJB, измененный объект распространяется и обновляется на клиенте. –

+0

Хорошо. Означает ли это, что, если ejb изменяет параметры, те же изменения производятся и на копии клиента. Но когда клиент изменяет их, то же самое не будет распространяться на ejb? –

0

«Аргументы и результаты методов удаленного бизнес-интерфейса передаются по значению». источник JSR 318: Enterprise JavaBeans,Version 3.1 страница 45, 3.2.1 Удаленные клиенты

Ваш объект «ученик» не передается по ссылке, а по значению, поскольку EJB аннотируется с помощью @Remote.

пытаются заменить линию

remoteService.parameterIsolationTest(student); 

с

student = remoteService.parameterIsolationTest(student); 
Смежные вопросы