在CDI Singleton bean中使用一个线程

时间:2013-10-09 14:17:38

标签: java-ee-6 cdi

JEE6中,可以在CDI @Singleton bean中使用一个线程@Produces与外部第三方服务的连接。

我有一场正是这样的JEE6战争:

import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;


@Singleton
@Startup
public class MyBean {

    @Produces
    public SomeService getSomeService() {

        /** Retry a number of times to connect to some service **/
        SomeService someService = retry("127.0.0.1");

        return someService;
    }
}

重试方法将尝试多次连接到服务。它使用Executors.newSingleThreadScheduledExecutor()每隔x秒重新尝试连接。

我相信JEE7他们为这类事情添加了一个托管执行人。但是在JEE6中使用普通的Executor是否可以。

2 个答案:

答案 0 :(得分:1)

在Java EE 6中,在EJB中启动线程是不可接受的。在Java EE 7中,他们已经放松了一些。

答案 1 :(得分:0)

为了在JEE6中运行耗时的操作,您可以在EJB中使用@Asynchronous注释。它将在一个单独的容器管理线程中异步启动方法,所有这些都是合法的。这是一个很好的例子:http://www.adam-bien.com/roller/abien/entry/conveniently_transactionally_and_legally_starting

相关问题