[英]Multiple instances of EJB 3.1 no-interface Singleton / Stateful session bean
我想访问无接口Singleton 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;
}
上面的代码似乎有效。
现在,我需要将这两个MySingleton实例注入到消息驱动的Bean中:
MDB.class
@Stateless
public class MDB implements MessageListener {
@EJB (lookup="?") MySingleton singletonA;
@EJB (mappedName="??") MySingleton singletonB;
}
但是在这一点上我完全迷失了。 我知道我可以通过将2个实例定义为唯一接口的2个(空)实现来简化事情。 但是我有一些问题,因为该类包含一些非静态字段,因此无法将其定义为接口。
编辑
由于MDB的性质,我无法通过引用传递Singleton。 最后,我想避免创建MySingleton的两个相同的实现。
感谢收到的答复,我一直在重新思考整个体系结构,我必须同意将MySingleton定义为有状态的事实也很好。
我想你意识到这是一个矛盾。 @Singleton
只有一个实例,因此您不能有两个。 可能您需要另一种bean(例如@Stateful
ejb)
首先,在配置器中MySingleton singletonA和MySingleton singletonB是相同的。 这是因为@Singleton的要点是只有一个实例,无论它被注入多少次(在同一JVM中)。 容器会在您首次注入实例之前创建实例,之后该实例将被共享。 因此,您也可以再次将其注入(而不是只注入一次)到AnotherEJB中 。
即使我们假设没有Singleton的情况(例如,Staless),使用@EJB进行注入也不会在其他地方产生可用于注入的新条目。 因此,如果您在类A中通过@EJB注入某些内容,则不能通过对类B的注入传递引用。要传递引用,方法调用是一种好方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.