0

1回のEJB実行内で複数のスレッドを実行する方法はありますか?

私がやろうとしているのは、基本的にETLプロセスですonMessage。MDB(@MessageDriven)のメソッドはクエリを実行し、複数のスレッドを開始して、ターゲットテーブル(JPAではなくすべてネイティブJDBC)に行を挿入します。

同じように簡単に@StatelessセッションBeanにすることもできます。

問題はExecutors.newFixedThreadPool、EJB内で使用できますか?仕様に従って厳密に合法ではない場合でも、バックグラウンドスレッドがJava EE /コンテナ管理のリソースにアクセスしていない場合は、それを回避できますか?

そうでない場合、これを行うためのより良い方法はありますか?私は知って@Asyncいますが、ジョブごとに許可されるスレッドの数を制御できなくなります。

4

1 に答える 1

0

Executors.newFixedThreadPool実際には、はい、 EJB内で使用できます。EJB仕様では、Java EEサービス(状況に関係なく)とサーバー自体が消費するリソースのいずれかに問題が発生する可能性があるため、EJBが実行できることを制限しています。MDBアクティビティの「ストーム」が発生した場合に、JVMが処理できるよりも多くのスレッドを作成しないようにすることで、後者に注意する必要があります。

于 2012-07-11T16:23:52.620 に答える