繁体   English   中英

EJB 3.1无接口单例/有状态会话Bean的多个实例

[英]Multiple instances of EJB 3.1 no-interface Singleton / Stateful session bean

我想访问无接口Singleton MySingleton多个实例singletonAsingletonB 实例首先在另一个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 singletonAMySingleton singletonB是相同的。 这是因为@Singleton的要点是只有一个实例,无论它被注入多少次(在同一JVM中)。 容器会在您首次注入实例之前创建实例,之后该实例将被共享。 因此,您也可以再次将其注入(而不是只注入一次)到AnotherEJB中

即使我们假设没有Singleton的情况(例如,Staless),使用@EJB进行注入也不会在其他地方产生可用于注入的新条目。 因此,如果您在类A中通过@EJB注入某些内容,则不能通过对类B的注入传递引用。要传递引用,方法调用是一种好方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM