多くの場合、JavaWebアプリケーションのhttpサーブレットによって呼び出される長時間実行プロセスがいくつかあります。典型的な例は、100 mp3ファイルをflak形式に変換することです(単なるランダムな例)。http接続は有効ですが、プロセスには長い時間がかかるため、タスクの進行状況を示す進行状況バーを作成してWebページ(できればuisng ajax)に表示できます。このためのデザインパターンはどうあるべきですか?たとえば、サーブレットのpostメソッドは実際の長期プロセスを呼び出し、サーブレットのgetメソッドは進行状況リスナーを呼び出しますか?
質問する
2602 次
1 に答える
5
Java EEでは、次の構造をお勧めします。
- サーブレット呼び出し(POSTなど)がプロセスを開始します
- POSTは
@Asynchronous
EJB呼び出しを使用して重い負荷を処理するため、時間のかかるプロセスの実行が開始されます - また、進行状況ホルダーオブジェクト(コンテキスト/セッションに配置されるPOJOなど)も渡します(@Stateful EJBも実行します)
- POSTが返され、バックグラウンドジョブが続行されます
- ステータスチェックはAjaxHTTP呼び出しによって実行され、スターターと同じセッションを使用します
- Ajax呼び出しは、セッション/コンテキスト/ @ステートフルから進行状況ホルダーオブジェクトを取得し、ステータスを読み取り、戻ります
- ステータスはバックグラウンドスレッドによって継続的に更新されます(boolean、char、int、またはfloat(最大32ビットプリミティブ)の1つの属性のみを使用しない限り、更新は同期される必要があります)
@Asynchronous
これはEJB3.1以降で使用可能であることに注意してください。
于 2013-02-21T13:30:02.057 に答える