有没有办法在单个EJB执行中运行多个线程?
我正在尝试做的本质上是一个ETL过程:MDB的onMessage
方法(@MessageDriven
)将运行查询,然后启动多个线程以将行插入到某个目标表中(所有本机JDBC,而不是JPA。)
它也可以很容易成为@Stateless
会话bean。
问题是 - 你能在EJB中使用Executors.newFixedThreadPool
吗?即使根据规范它不是严格合法的,如果后台线程没有访问任何Java EE /容器管理的资源,你能不能使用它?
如果没有,有更好的方法吗?我知道@Async
但会失去对每个作业允许的线程数的控制权。
答案 0 :(得分:0)
实际上,是的,您可以在EJB中使用Executors.newFixedThreadPool
。 EJB规范限制了EJB可以执行的操作,因为它可能导致Java EE服务出现问题(对于您的情况不会出问题)以及服务器本身消耗的资源。你需要小心谨慎,确保如果你得到MDB活动的“风暴”,你最终不会创建比JVM可以处理的更多的线程。