3

関連するデータの量によって数分かかる可能性があるJava(オラクルからのデータのエクスポート)を使用してレポートを生成する必要があるため、フォームを送信すると、画面が終了するまでフリーズします。

ユーザーが閲覧を継続できるように、バックグラウンド プロセスでレポートを生成するにはどうすればよいですか?

JMS? JMSでこれを行うにはどうすればよいですか? (例や説明は大歓迎です)

別の方法はありますか?Java EE 仕様によると、最良の選択肢は何でしょうか?

4

1 に答える 1

1

はい、JMS はオプションの可能性があります。メッセージをキューに送信するだけで、メッセージ駆動型 Bean (特別な種類の EJB) がメッセージを受信して​​処理します。この場合、メッセージはコマンドのように機能します。メッセージ駆動型 Bean なしで JMS を使用することもできますが、それはもう少し複雑です。

EJB 3.1 環境にいる場合は、非同期 EJBを試すことができます。

それ以外の場合、仕様では推奨されていませんが、Web コンテナーでスレッドを開始できます。ジョブごとに 1 つのスレッドを開始するかServletContextListener、たとえばデータベースのテーブルに保存したコマンドを処理する で 1 つのバックグラウンド スレッドを開始/停止することができます。

非同期ジョブの使用は表面的には非常に簡単ですが、本番環境では、エラーを管理する方法、進行状況を監視する方法、失敗したジョブを再試行する方法、2 つの同じジョブが同時に実行されないようにする方法などを考える必要があります。各アプローチには独自の強みがあります。そして弱さ。トランザクションに必要な戦略にも注意してください (JMS はトランザクション処理されます。非同期 EJB 3.1 については正確にはわかりません。JDBC トランザクションまたは で正しく処理すれば、カスタム スレッドとデータベース テーブルを処理できますUserTransaction)。

それが役に立てば幸い。

于 2010-07-29T18:30:50.200 に答える