如何在Java EE环境中创建线程?

Kri*_*nya 5 java multithreading workmanagers java-ee-6 websphere-8

我有一个要求,我必须在表中保留一些数据,持久可能需要一些时间.基本上我想坚持一个日志.我不希望执行等到持续完成.

我知道我必须使用线程来完成这项任务,我知道不鼓励在企业应用程序中创建线程.

所以我开始阅读有关工作管理器的知识,并在websphere应用服务器8.5中理解并尝试了一个示例程序.

我在websphere中使用了asynchbeans.jar,现在我很困扰我正在编写特定于供应商的代码.

然后我遇到了在Oracle java文档中描述的commonj work api.现在我想使用fabric3的commonj api.

我怀疑的是,有没有更好的方法来完成同样的任务?一种EJB方式?或者工作经理对我的要求有好处吗?

Bre*_*ail 7

你有一些选择:

  1. 异步bean.如您所述,这些是特定于供应商的.
  2. commonj几乎不是特定于供应商的.据我所知,它只由IBM WebSphere Application Server和BEA WebLogic实现.该API实际上被Java EEConcurrency Utilities取代,这是最好的选择.
  3. EJB @Asynchronous方法.需要使用EJB(某些不需要的复杂性).
  4. EJB计时器.需要使用EJB,需要可序列化的数据.
  5. JMS.可能需要使用MDB来接收消息,需要可序列化的数据.
  6. 实际上创建线程.EE规范不建议这样做,但只要你不尝试使用EE结构(lookup("java:..."),JPA,UserTransaction等),那么你应该没问题.