远程ejb方法参数隔离
Remote ejb method parameter isolation
我有一个带对象的远程 ejb。它使用 setter 方法修改该对象中的数据。在客户端中,我使用 getter 方法打印了该值,并观察到该值发生了变化。
但是文档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
}
}
服务器端的 bean 与服务器 JVM 中存在的 Java 个对象一起运行。客户端有不同的 JVM,因此有不同的对象集。当您执行远程 EJB 调用时,这些对象需要以某种方式 'transferred' 到达客户端并返回。问题是此 'transfer' 仅在 EJB 调用本身期间发生。因此,如果您的客户端在 EJB 上调用 setter,则另一个对象将被发送到服务器,但是如果客户端之后修改了该对象(没有在 EJB bean 上调用任何内容),则客户端的对象将不会被传输到服务器 - 服务器将不知道客户端更改了对象。
如果我理解您的情况,您将在 EJB 上调用 setter,然后为相同的 属性 调用 getter。 Setters 和 getters 都是 EJB 的方法,因此这将包括 EJB 调用,在这种情况下,您从客户端所做的更改将传播到服务器。
"The arguments and results of the methods of the remote business interface are passed by value." 来源 JSR 318: Enterprise JavaBeans,Version 3.1 第 45 页,3.2.1 远程客户端
您的 'student' 对象不是按引用传递而是按值传递,因为 EJB 是用 @Remote 注释的。
尝试替换行
remoteService.parameterIsolationTest(student);
和
student = remoteService.parameterIsolationTest(student);
我有一个带对象的远程 ejb。它使用 setter 方法修改该对象中的数据。在客户端中,我使用 getter 方法打印了该值,并观察到该值发生了变化。
但是文档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
}
}
服务器端的 bean 与服务器 JVM 中存在的 Java 个对象一起运行。客户端有不同的 JVM,因此有不同的对象集。当您执行远程 EJB 调用时,这些对象需要以某种方式 'transferred' 到达客户端并返回。问题是此 'transfer' 仅在 EJB 调用本身期间发生。因此,如果您的客户端在 EJB 上调用 setter,则另一个对象将被发送到服务器,但是如果客户端之后修改了该对象(没有在 EJB bean 上调用任何内容),则客户端的对象将不会被传输到服务器 - 服务器将不知道客户端更改了对象。
如果我理解您的情况,您将在 EJB 上调用 setter,然后为相同的 属性 调用 getter。 Setters 和 getters 都是 EJB 的方法,因此这将包括 EJB 调用,在这种情况下,您从客户端所做的更改将传播到服务器。
"The arguments and results of the methods of the remote business interface are passed by value." 来源 JSR 318: Enterprise JavaBeans,Version 3.1 第 45 页,3.2.1 远程客户端
您的 'student' 对象不是按引用传递而是按值传递,因为 EJB 是用 @Remote 注释的。
尝试替换行
remoteService.parameterIsolationTest(student);
和
student = remoteService.parameterIsolationTest(student);