EJB / MDB中的多线程

时间:2012-07-10 19:09:41

标签: java-ee ms-access ejb java.util.concurrent

有没有办法在单个EJB执行中运行多个线程?

我正在尝试做的本质上是一个ETL过程:MDB的onMessage方法(@MessageDriven)将运行查询,然后启动多个线程以将行插入到某个目标表中(所有本机JDBC,而不是JPA。)

它也可以很容易成为@Stateless会话bean。

问题是 - 你能在EJB中使用Executors.newFixedThreadPool吗?即使根据规范它不是严格合法的,如果后台线程没有访问任何Java EE /容器管理的资源,你能不能使用它?

如果没有,有更好的方法吗?我知道@Async但会失去对每个作业允许的线程数的控制权。

1 个答案:

答案 0 :(得分:0)

实际上,是的,您可以在EJB中使用Executors.newFixedThreadPool。 EJB规范限制了EJB可以执行的操作,因为它可能导致Java EE服务出现问题(对于您的情况不会出问题)以及服务器本身消耗的资源。你需要小心谨慎,确保如果你得到MDB活动的“风暴”,你最终不会创建比JVM可以处理的更多的线程。