为无状态逻辑提供EJB @Aynchronous方法的最有效方法

时间:2014-10-13 12:43:30

标签: asynchronous glassfish singleton ejb stateless-session-bean

我需要创建一些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。

1 个答案:

答案 0 :(得分:1)

我同意您的评估@Singleton + @ConcurrencyManagement(BEAN)非常适合您的问题描述。正如您所强调的那样,@Stateless的缺点是,如果存在并发调用,它可能会构造多个实例。这可能是开销,但也可以避免它,因为它很容易实现。