当前位置: 首页 > 知识库问答 >
问题:

将@Named、@Stateful注入@Singleton EJB

薛阳荣
2023-03-14

有没有办法将@Named bean注入Singleton?

这是需要注入的类

@Named
@Stateful
@ConversationScoped
public class PlaySessionBean implements Serializable {
    @PersistenceContext(unitName = "test-persistence-unit", type = PersistenceContextType.EXTENDED)
    private EntityManager entityManager;
....
}

bean用于视图实用程序(由Forge生成)

问题是我需要从@Startup@Singleton访问PlaySessionBean

@Startup
@Singleton
public class StartupBean {
  private static final Logger LOGGER = Logger.getLogger(StartupBean.class.getName());

  private EntityManager entityManager;
  private static EntityManagerFactory factory =
      Persistence.createEntityManagerFactory("wish-to-paris-persistence-unit");
  private List<PlaySession> playSessions;

  @PostConstruct
  public void run() {
    this.entityManager = factory.createEntityManager();
    CriteriaQuery<PlaySession> criteria =
        this.entityManager.getCriteriaBuilder().createQuery(PlaySession.class);
    this.playSessions =
        this.entityManager.createQuery(criteria.select(criteria.from(PlaySession.class)))
            .getResultList();
    this.entityManager.close();
  }
 ....

但它总是失败,并抱怨说游戏会话不是一个实体

有没有办法将命名的有状态bean注入Singleton?如果没有,有什么解决办法吗?

谢谢

共有1个答案

况喜
2023-03-14

您正在混合CDI范围和EJB状态。我希望您选择CDI或EJB,但不要混合2。首先,两种架构之间的事务管理是不同的。此外,每个对象的生命周期完全不同。

如果要使用EJB并调用相应的会话bean,可以将@Stateful会话bean注释为@LocalBean,因为会话bean没有接口继承。

例子:

@Stateful
@LocalBean
public class PlaySessionBean implements Serializable {

}

然后在您的@StartupSingleton bean上,您可以通过以下方式简单地引用它:

@EJB
private PlaySessionBean playSessionBean;

EJB会话Bean仍然是有状态的。

 类似资料:
  • 有关 Keras LSTM 模型的更多文档 在输入/输出对上训练模型,其中输入是生成的长度为 input_len 的均匀分布随机序列, 输出是窗口长度为 tsteps 的输入的移动平均值。input_len 和 tsteps 都在 "可编辑参数" 部分中定义。 较大的 tsteps 值意味着 LSTM 需要更多的内存来确定输入输出关系。 该内存长度由 lahead 变量控制(下面有更多详细信息)。

  • 我在EJB模块中有一个@Stateless bean 我在同一个EJB模块中有一个@Named bean Bar#hello是从Web模块中的CDI bean调用的。 由于某些原因,Bar并没有被注入到Foo中——它总是一个空引用。我希望这会奏效。

  • Guice还提供了另一种映射绑定的方法,而无需创建自定义注释。 它允许使用@Named注释。 使用命名注释进行映射 bind(SpellChecker.class).annotatedWith(Names.named("OpenOffice")).to(OpenOfficeWordSpellCheckerImpl.class); 使用@Named注释进行注入 @Inject public Tex

  • 管道用于相关过程之间的通信。 我们可以使用管道进行无关的进程通信吗,比方说,我们想从一个终端执行客户端程序,从另一个终端执行服务器程序? 答案是否定。那么我们如何才能实现无关的流程沟通,简单的答案就是命名管道。 即使这适用于相关流程,但使用命名管道进行相关流程通信也没有任何意义。 我们使用一个管道进行单向通信,使用两个管道进行双向通信。 相同条件是否适用于命名管道。 答案是否定的,我们可以使用单个

  • 主要内容:使用@Named 注解映射,使用@Named 注解注入,Google Guice @Named 注解完整示例,输出Google Guice 还提供了另一种无需创建自定义注释即可映射绑定的方法。它允许使用@Named 注解。 使用@Named 注解映射 使用@Named 注解注入 Google Guice @Named 注解完整示例 创建一个名为 GuiceTester 的 Java 类。 GuiceTester.java 输出 编译并运行该文件,您将看到以下输出。

  • ember-named-yields A stop-gap for the named yields RFC and based off the experimentation here. Demo Install ember install ember-named-yields Usage Setup the named yields in your component template: {{