EJB 无状态初始化模式

And*_*rés 6 architecture design-patterns ejb-3.1 jakarta-ee

我有一个 EJB 无状态会话 Bean。我有这些要求:

  1. 这个无状态 EJB 应该在启动时初始化
  2. 初始化代码应该对数据库进行事务性访问

问题是:

  1. @Startup 仅适用于 @Singleton EJB
  2. @PostConstruct 注释(至少在 Websphere 上)此时没有事务上下文,因此初始化代码在这里爆炸!

可能的解决方案?

  1. 使用 Java EE Timer 但它似乎是为定期执行而设计的。我只想在零时间执行一次。
  2. 仅出于初始化目的使用@Singleton + @Startup EJB,并将此单例 EJB 注入到依赖的无状态 EJB。

题:

  1. 有人能解释一下应该如何初始化无状态 EJB 吗?还是没有意义?(我的意思是,无状态 EJB 应该没有初始化状态?)
  2. 是否有任何模式表明将辅助 EJB @Singleton 与 @Startup 一起使用是个好主意?

And*_*rés 4

最后我选择了:

  • EJB @Stateless-- 引用 --> EJB @Singleton(带有@Startup

这样,我可以初始化服务请求所需的(共享和只读)状态或上下文。