2

我是 EJB 的新手。我听说在某些情况下,将一些信息(例如配置)存储在无状态 bean 中是可以接受的。据我了解,无状态 bean 生命周期始于 bean 的方法调用并结束于方法结束。方法结束后,无状态 bean 将返回到池中。

  1. 我想知道配置字段是否会在每次调用 bean 的方法时或仅在创建 bean 时重新初始化。
  2. 另外我想知道在无状态 bean 私有字段中存储哪些信息是可以接受的。
@Stateless
public class MyBean {

    private String config = ....;

    //.....
}

先感谢您。

4

1 回答 1

2
  1. bean的private String config = ...每个实例在创建时(通常在应用程序启动期间,但也可能在应用程序服务器决定需要更多 bean 来处理不断增长的流量时)初始化一次 bean 实例。

  2. 基本上,当您执行公共 bean 的方法时,您肯定是该 bean 实例的唯一执行者。在此期间,您可以将任何内容存储在私有变量中。但是,一旦您返回调用您的 bean 的代码,您永远无法保证后续调用将被定向到同一个实例。

例子:

@Stateless
public class MyBean implements MyBeanIntf {

    private Object state;

    @Override 
    public void beanMethod() {
        state = new Object();
        privateMethod();
    }

    private void privateMethod() {
        // it's safe to access 'state' here, will be the one set in
        // beanMethod()
    }

    @Override
    public void otherMethod() {

    }
}

@Stateless
public void MyBeanClient {
    @EJB
    private MyBean myBean;

    someMethod() {
        myBean.beanMethod();
        // Not necessarily the same instance that executed beanMethod
        // will execute otherMethod
        myBean.otherMethod(); 
    }
}

那是理论。在实践中,我会避​​免依赖于在无状态 EJB 中保持内部临时状态的代码——只是因为这种风格向其他程序员建议,通常可以拥有 SLSB 的状态,这会导致代码混乱和潜在的错误(尤其是如果先前执行的状态被错误地选择为当前状态)。

于 2013-06-23T21:26:50.253 回答