我需要创建一些EJB以提供一些@Aynchronous
方法。
一些EJB不会有任何状态。
有些可能具有CDI注入(使用@Inject
)的线程安全实例变量@ApplicationScoped
。
以下是执行此操作的最有效方法吗?:
@Singleton
@ConcurrencyManagement(BEAN)
public class EjbClass {
@Asynchronous
public void asyncMethod() {
//some code
}
}
我的第二个猜测是使用:@Stateless
而不是一对@Singleton
&@ConcurrencyManagement(BEAN)
。
但是,这些EJB中不应该只需要一个以上的实例,因此,除非我缺少一些陷阱,否则@Singleton
我想那@Singleton
将是最有效的。
我在GlassFish 4.1中使用EJB 3.2。
我同意您的评估,认为@Singleton
+@ConcurrencyManagement(BEAN)
非常适合您的问题描述。正如您所强调的那样,@Stateless
它的缺点是,如果存在并发调用,它可能会构造多个实例。这种开销可能是,但也很容易避免,因此可以避免。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句