【发布时间】:2012-03-24 09:50:44
【问题描述】:
我想访问无接口单例MySingleton 的多个实例singletonA 和singletonB。实例首先在另一个 Singleton Configurator 类中定义:
MySingleton.java
@Singleton
@LocalBean
public class MySingleton {
...
}
Configurator.java
@Singleton
@Startup
@LocalBean
public class Configurator {
@EJB MySingleton singletonA;
@EJB MySingleton singletonB;
}
上面的代码,貌似有效。
现在,我需要将这 2 个 MySingleton 实例注入到消息驱动 Bean 中:
MDB.class
@Stateless
public class MDB implements MessageListener {
@EJB (lookup="?") MySingleton singletonA;
@EJB (mappedName="??") MySingleton singletonB;
}
但在这一点上,我完全迷失了。我知道我可以通过将 2 个实例定义为唯一接口的 2 个(空)实现来使事情变得更简单。但是我有一些问题,因为该类包含一些非静态字段,所以我无法将其定义为接口。
编辑
由于 MDB 的性质,我不能通过引用传递单例。 最后,我想避免创建两个相同的 MySingleton 实现。
感谢收到的答复,我一直在重新思考整个架构,我必须同意将 MySingleton 定义为有状态的这一事实。
【问题讨论】:
-
基于编辑:单例通常与有状态的非常不同,但它们更好地匹配无状态 bean。当你重新设计你的应用程序时,也许你可以考虑这个事实。 Stateless 和 Singleton 都基于请求(通常)工作并且不维护状态。
标签: java interface singleton ejb ejb-3.1