Jakarta ee JavaEE容器中的异步任务

Jakarta ee JavaEE容器中的异步任务,jakarta-ee,ejb,Jakarta Ee,Ejb,我刚刚听说在JavaEE容器中生成自己的线程是一种糟糕的做法。自从几个月前开始学习JavaEE6开发以来,我已经做了一段时间了。我一直在做的是: 1.)从web应用程序主入口点(实现ServletContextListener的对象) 2.)我在contextInitialized方法中创建了几个线程来为web应用程序后端运行一些异步后台任务 3.)我在contextDestroyed方法中清理资源 有更好的方法吗?如何在不产生线程的情况下创建异步后台任务?不使用线程的原因是什么 我使用的是EJ

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

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

2.)我在contextInitialized方法中创建了几个线程来为web应用程序后端运行一些异步后台任务

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

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


我使用的是EJB3.0和JavaEE6,手动生成线程确实是一种糟糕的做法,因为您希望Java容器在应用程序代码之外为您管理线程池。JavaEE 6有一个专门用于此目的的名为@Asynchronous的注释,而Oracle在EJB3.1之前有一个。@Asynchronous提供了一种更简单的方法来处理异步作业。

在Java EE 7中,请看一看新的并发Utils API规范。

我很想听听人们对此的看法。我相信规范说你不应该从EJB中产生线程,所以我不确定你是否做错了什么(servlet不是EJB)。使用线程的替代方法是使用EJB计时器。您还应该提到您正在使用的EJB版本。