0

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

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

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

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

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

4

1 回答 1

0

实际上,是的,您可以Executors.newFixedThreadPool在 EJB 内部使用。EJB 规范限制了 EJB 可以做什么,因为它可能会导致 Java EE 服务(对您的情况而言不是问题)和服务器本身消耗的资源出现问题。您需要小心后者,以某种方式确保如果您遇到 MDB 活动的“风暴”,您最终不会创建超过 JVM 可以处理的线程。

于 2012-07-11T16:23:52.620 回答