我需要创建一些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。
答案 0 :(得分:1)
我同意您的评估@Singleton
+ @ConcurrencyManagement(BEAN)
非常适合您的问题描述。正如您所强调的那样,@Stateless
的缺点是,如果存在并发调用,它可能会构造多个实例。这可能是开销,但也可以避免它,因为它很容易实现。