jakarta-ee - 无状态bean : private field reinitialization

标签 jakarta-ee jpa ejb-3.0 stateless-session-bean

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

  1. 我想知道config字段是否会在每次调用bean的方法时重新初始化,还是仅在创建bean时重新初始化。
  2. 我还想知道还有哪些信息可以存储在无状态 Bean 私有(private)字段中。
@Stateless
public class MyBean {

    private String config = ....;

    //.....
}

提前谢谢您。

最佳答案

  1. private String config = ... 在创建 bean 时(通常在应用程序启动期间,但当应用程序服务器决定需要更多 Bean 来处理不断增长的流量时也可能发生)。

  2. 基本上,当您执行公共(public) bean 的方法时,您保证是该 bean 实例的唯一执行者。在此期间,您可以在私有(private)变量中存储任何内容。但是,一旦返回到调用 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 的状态是可以的,这会导致代码困惑和潜在的错误(特别是如果之前执行的状态被错误地选择为当前状态)。

关于jakarta-ee - 无状态bean : private field reinitialization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17265222/

相关文章:

database - Twitter 喜欢 JPA 中的关系

hibernate - 使用 hibernate 注释会丢失什么?

java-使用过滤器检查远程地址

jakarta-ee - weblogic 设置问题 : Server start leads to "Server subsystem failed" Error

jpa - 使用 Querydsl 获取 @ElementCollection 条目

spring - 在事务函数中,调用clear() 分离所有实体?

java - 使用注入(inject)的 EJB 对 Spring POJO 进行单元测试

java - 如何在web层捕获OptimisticLockException

java - 使用 GlassFish v3、EJB 和 SOAPUI

Java Bean getter 不返回值