JavaEE容器中的异步任务

时间:2012-05-23 02:15:47

标签: java-ee ejb

我刚才听说在JavaEE容器中生成自己的线程是一种不好的做法。几个月前我开始学习JavaEE 6开发以来,我已经做了一段时间了。我一直在做的是:

1.)从Web应用程序主入口点(实现ServletContextListener的对象),

2.)我创建了一对线程来为contextInitialized方法中的Web应用程序后端运行一些异步后台任务。

3.)我在contextDestroyed方法中清理资源。

有没有更好的方法呢?如何在不生成线程的情况下创建异步后台任务?不使用线程的原因是什么?

我正在使用EJB 3.0和JavaEE6

3 个答案:

答案 0 :(得分:4)

手动生成线程确实是一种不好的做法,因为您希望Java容器在应用程序代码外部为您管理线程池。 JavaEE 6有一个名为@Asynchronous的注释,专门用于此目的,Oracle有一个official tutorial

答案 1 :(得分:2)

在EJB3.1之前,解决方法是创建JMS和MDB以在EJB容器中执行异步作业,这相对较重,并且依赖于消息代理。 @Asynchronous提供了一种更简单的方法来处理异步作业。

答案 2 :(得分:0)

在Java EE 7中,我们看一下新的Concurrency Utils API规范。