0

JBOSS 内でマネージド Bean/サービスを実行しています。次に、時折ウェイクアップしてマネージド Bean のメソッドを呼び出す Quartz ジョブがあります。このメソッドは長くて長引く場合があり、Quartz ジョブをタイムアウトさせたくないので、マネージド Bean 内にスレッドを実装して処理を実行しました。スレッドが終了したら、データベース テーブルを結果で更新する必要があります。これは非常に連続したプロセスであり、いくつかのビジネス ルールなどに基づく必要があります。

私の主な質問は、サービス内で問題なく EntityManager を使用できることですが、スレッド内からは使用できず、NullPointerException が発生します。これに対処する最良の方法は何ですか?

ありがとう、

スコット

4

2 に答える 2

0

ドキュメントと仕様によると、エンティティマネージャーはスレッドセーフではなく、私が当初考えていたように、異なる子スレッド間で使用することはできません。最終的にfvuによって提供されたものと同様の元の設計に戻りましたが、タイムアウト期間を変更して長時間実行プロセスを適切に機能させることができる注釈をいくつか見つけました。これが私が使用した注釈です:

@PoolClass(value=org.jboss.ejb3.StrictMaxPool.class, timeout=360000000L)
于 2009-10-30T10:15:33.167 に答える
0

アプリサーバーでスレッドを作成することは推奨されないため、セットアップを少し変更します。

処理のコアをメッセージ駆動型 Bean に移動し、MDB がリッスンしているキューにメッセージを送信するだけの Quartz ジョブを作成します。次に、MDB は EJB を呼び出すことができます。このように、すべてが標準で許可されている範囲内にとどまります。

于 2009-10-28T22:30:06.333 に答える