无状态EJB线程问题

时间:2013-04-09 15:29:38

标签: java-ee thread-safety ejb pool

考虑以下两个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的相同实例上调用这两个方法(并且在该实例上的两个方法调用之间不会调用其他方法)?

1 个答案:

答案 0 :(得分:2)

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

即使你"思考"它是同一个实例(例如代码中的一个@EJB MyBean1),这些调用可能会遇到不同的MyBean个实例。

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

但是,这应该对您不感兴趣,因为您正在使用无状态EJB - 即您不应该在EJB中存储任何状态。
因此,要么获得相同或不同的EJB实例,要么在调用之间调用相同类型的EJB上的某个业务方法,这不应该是一个问题。