2

Webサイトからスコアをダウンロードしたり、いくつかの重要なタスクの完了後に電子メールを送信したりするなどの非同期ジョブ。現在、いくつかのスコアをダウンロードするときは、現在のページで応答ページを取得するか、ファイルをダウンロードするのを待つ必要があります。ダウンロードスコアをクリックすると、バックグラウンドで発生してWebサイトの他の部分に移動し、その間にジョブのステータスを確認できる可能性はありますか。または、将来的にいくつかのジョブをスケジュールし、その実行結果を電子メールで取得します。

私たちのものは、Hibernate3.5ORMを使用したStruts2Webアプリケーションです。いくつかのJavaスケジューリングライブラリを参照した後、Quartzに関する情報を入手しました。しかし、Quartzは上記の要件に適したライブラリですか、それとも私が試すことができる他のライブラリですか?私を正しい方向に導いてください。

4

2 に答える 2

8

ある種の非同期処理サポートが必要になります。以下を使用できます。

次に、何らかの方法で結果を復元します。ブラウザで直接配信するか、電子メールで配信するかによって異なります。

  • ページをレンダリングするたびに、完了/進行中のジョブがないかどうかを確認してください。完了したジョブがいくつかある場合は、ページのどこかに追加のリンクを表示します (一種の通知)。ジョブが進行中の場合は、リクエストを開始して 1 秒おきにリクエストするか、ロングポーリング/を使用して結果をすぐに受け取ります

  • 結果を電子メールで送信する場合は、ジョブが終了してから送信してください。はるかにシンプルですが、ユーザーフレンドリーではありません。

于 2012-06-07T13:46:33.857 に答える
1

クォーツは確かにそれを行う1つの方法であり、特定の時間または特定の頻度で実行するようにジョブをスケジュールする場合にうまく機能します。

ユーザーアクションに応じてバックグラウンドで何かを開始し、そのステータスを確認したい場合は、このパターンにより適している可能性のある他のいくつかの方法があります。

  • java.util.concurrentパッケージ:ThreadPoolExecutorをセットアップし、を実装するタスクをそれに送信できますCallableFuture<T>完了を確認できるオブジェクトを取得し()isDone、完了時にその結果を取得します(get)。

  • EJBまたはSpringには、(セッション)Beanメソッドが@Asyncorであるという概念もあります。これは、同様@Asynchronousにを返し、上記のように動作します。Future<T>基本的に、これはスレッドプールの作成と管理をコードから抽象化し、コンテナーまたはフレームワークに移動します。

于 2012-06-07T13:45:13.860 に答える