EJB和线程

The*_*olf 7 java ejb java-ee message-driven-bean

据我所知,从EJB中生成线程是非法的,因为它可能会干扰EJB的生命周期.但是,使用JDK中的预定义Java类是非法的,它在内部生成并处理EJB中的Executor等线程,特别是MDB?

jta*_*orn 11

你"不能"(不应该)使用线程,线程池,执行器...以上所有.使用应用服务器的目的只是编写业务逻辑,让应用服务器完成繁重的任务.如果你真的需要自己做线程,请使用EJB 3.1"单例"服务来管理线程.但是,正如其他人所提到的,最好将其留给应用服务器.在app服务器中进行并行处理的一种方法是使用MDB(听起来你已经在使用它),尽管取决于并行处理的类型,这些可能过于重量级.


Dav*_*ins 11

这就是EJB 3.1 @Asynchronous的用途,绝对应该使用而不是Executor.与容器的线程池竞争通常非常危险.这样做是杀死​​性能的好方法.

Asynchronous支持将使用容器的线程池和变得更加安全.有关工作原理的详细信息,请参阅此答案Asynchronous


Cha*_*tin 6

线程和EJB的最大问题是,线程是容器大量使用的有限资源,并且线程错误会导致线程池泄漏,从而可以有效地杀死整个JVM实例。

执行程序应该表现得更好,但是仍然会在一段时间内用完线程。如果有人调整了容器以耗尽可用线程,它也可能会立即失败。

总结是,您将要走钢丝。