我有一个EJB无状态会话Bean。我有这些要求:
问题是:
可能的解决方案?
问题:
答案 0 :(得分:2)
初始化无状态EJB没有任何意义,因为这是Java EE容器的工作。 此外,Java EE 6本身提供IOC模式。 IOC基本上意味着隐藏注入资源的初始化过程。
您的2.解决方案是正确的,因为您需要事务访问。
然后你需要考虑两种情况/状态:
一个。单身人士开始正确
湾单身人士在启动时失败
换句话说,你确定你的(1.)语句是正确的还是你可以用lazy-init模式解释它?
当应用程序启动时出现@startup,也许在懒惰的init激活单例上的状态也符合你的需求?
答案 1 :(得分:1)
初始化代码应该对数据库进行事务性访问。
我不清楚数据库访问的内容,但是如果您需要获取一些数据并将其存储为无状态Bean的属性,请记住以下内容:
此信息将在每个无状态实例中复制。
每次创建新的bean实例时,您都将执行数据库查询。
在某些时候,可能很难确定所有的bean实例都具有相同的状态。
我不知道模式的名称,但是将信息存储在Singleton会话bean中并将其注入无状态会话中,这是一个很好的解决方案。即使是Singleton bean也可以管理同时发生的请求,因此它不会成为瓶颈。它还允许您以更一致的方式管理可能的信息更改。
答案 2 :(得分:1)
最后我选择了:
@Stateless
- 引用 - > EJB @Singleton
(带@Startup
)这样,我就可以初始化为请求提供服务所需的(共享和只读)状态或上下文。