繁体   English   中英

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

[英]How to create threads in Java EE environment?

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

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

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

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

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

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

你有一些选择:

  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等),那么您应该没问题。

JavaEE7有托管执行程序,您可以尝试。 您可以使用它生成任务,并在处理程序中接收托管回调。 这是EE标准的一部分,应该与平台无关。

在这里查看JDoc:

http://docs.oracle.com/javaee/7/api/javax/enterprise/concurrent/ManagedExecutorService.html

如果您需要确保所有日志条目都是安全编写的,那么您可能应该将JMS与持久性消​​息一起使用。 否则,您可以使用@Asynchronous EJB方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM