2012-07-10 55 views
0

有沒有一種方法可以在單個EJB執行中運行多個線程?我試圖做的基本上是一個ETL過程:MDB的onMessage方法(@MessageDriven)將運行一個查詢,然後啓動多個線程插入行到某個目標表(所有本機JDBC,而不是JPA )EJB/MDB中的多線程

它也可以很容易地成爲@Stateless會話bean。

問題是 - 你可以在EJB內使用Executors.newFixedThreadPool嗎?即使根據規範它不是嚴格合法的,如果後臺線程沒有訪問任何Java EE /容器管理的資源,是否可以避開它?

如果沒有,是否有更好的方法來做到這一點?我知道@Async,但是會失去對每個作業允許的線程數量的控制權。

回答

0

實際上,是的,您可以在EJB內部使用Executors.newFixedThreadPool。 EJB規範限制了EJB可以執行的操作,因爲它可能會導致Java EE服務(針對您的情況不存在問題)以及服務器本身消耗的資源出現問題。您需要注意後者,以確保如果您遇到MDB活動的「風暴」,您最終不會創建比JVM可處理的更多線程。