0

EJB3 Bean で構成される Java EE 6 アプリケーションの一部を設計しています。要件の一部は、複数の並列 (たとえば、数百) の長時間実行 (数日にわたる) データベース ハントです。個々のハントには、異なる検索パラメーター (開始時刻、終了時刻、クエリ フィルター) があります。パラメータは時間の経過とともに変更される場合があります。

現在、以下のことを考えています。

  • SearchController(ステートレス セッション Bean) は、一連の検索パラメータを作成し、SearchListenerJMS 経由で送信します。
  • SearchListener(メッセージ駆動型 Bean) は検索パラメーターを受け取りSearchWorker、パラメーターを使用して をインスタンス化します
  • SearchWorker(SLSB) データベースを繰り返し検索します。何かが見つかると、結果が JMS 経由で送信され、検索が続行されます。指定された「終了時間」に達すると、終了します

私が今疑問に思っていること:

  • EJB3 インスタンスが何日も実行されていることに問題はありますか? (それ以外は、コンテナの再起動に対処できる必要があります...)
  • SearchWorker現在実行中の の EJB インスタンスの数と数を知るにはどうすればよいですか?
  • それらと個別に通信することは可能ですか (System V シグナルを UNIX プロセスに送信するのと同様)、たとえば、新しいパラメーターを送信したり、インスタンスを終了したりすることはできますか?
4

1 に答える 1

0

巨大な ResultSet を長時間開いたままにしておくと、トランザクションのタイムアウトまたはデータベースのロックの問題が発生する可能性があります。

メソッドでどの Bean インスタンスが実行されているかを判別するための組み込みメカニズムがないため、独自のメカニズムを追加する必要があります。製品には、現在メソッドを実行している各タイプの Bean の数を知ることができる、ある種のパフォーマンス モニタリングがある場合があります。

クロススレッド通信に関しては、独自の同期を実装し、Bean メソッドを定期的にチェックインする必要があります。ビジネス メソッドへの並列呼び出しごとにプールから新しい SLSB が割り当てられるため、標準 EJB の範囲外になります。

于 2010-04-23T05:51:29.343 に答える