在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是否可以。
答案 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