1

考虑以下两个 EJB:

@Stateless
public class MyBean1 {

    pulic void method1() {
        //method implementation comes here
    }

    pulic void method2() {
        //method implementation comes here
    } 
}


@Stateless
public class MyBean2 {

    @EJB
    MyBean1 myBean1;

    public void businessMethod() {
        myBean1.method1();
        myBean1.method2();
    }
}

容器是否保证在 MyBean1 的同一个实例上调用这两个方法(并且在该实例上的两个方法调用之间不调用其他方法)?

4

1 回答 1

2

您无法判断是否可以访问同一实例。容器决定这一点。

即使您“认为”它是同一个实例(例如@EJB MyBean1您的代码中的一个),这些调用也可能会遇到不同的MyBean实例。

您的 EJB 的其他业务方法可能会在您的myBean1.method1()和调用之间被myBean1.method2()调用。例如,这可能是对不同组件的 EJB 的调用。

但是,这应该不会让您很感兴趣,因为您使用的是无状态 EJB - 即您不应该在 EJB 中存储任何状态。
因此,无论您获得相同或不同的 EJB 实例,还是某些其他组件将在您的调用之间调用相同类型的 EJB 上的业务方法,都不应该担心。

于 2013-04-10T08:54:45.310 回答