远程ejb方法参数隔离

时间:2015-06-02 14:26:36

标签: java ejb

我有一个远程ejb,它接受一个对象。它使用setter方法修改该对象中的数据。在客户端中,我使用getter方法打印了值,并观察到值已更改。

但文档Sum results of a few queries and then find top 5 in SQL表示参数是隔离的。有人可以解释一下吗?

@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
    }
}

2 个答案:

答案 0 :(得分:1)

服务器端的bean使用服务器JVM中存在的Java对象进行操作。客户端具有不同的JVM,因此具有不同的对象集。当您进行远程EJB调用时,需要以某种方式将这些对象“转移”到客户端并返回。问题是这种“转移”只发生在EJB调用本身。因此,如果您的客户端在EJB上调用setter,则另一个对象将被发送到服务器,但如果客户端之后修改此对象(不调用EJB bean上的任何内容),则客户端的对象将不会传输到服务器 - 服务器不会知道客户端更改了对象。

如果我理解你的场景,你在EJB上调用一个setter,然后在同一个属性上调用getter。 Setter和getter都是EJB的方法,因此这将包括EJB调用,在这种情况下,您从客户端进行的更改将传播到服务器。

答案 1 :(得分:0)

"远程业务接口的方法的参数和结果按值传递。"来源JSR 318: Enterprise JavaBeans,Version 3.1第45页,3.2.1远程客户端

你的学生'对象不是通过引用传递,而是通过值传递,因为EJB使用@Remote注释。

尝试替换行

remoteService.parameterIsolationTest(student);

student = remoteService.parameterIsolationTest(student);