Java HttpServlet があります。このサーブレットには、サーブレットの Response オブジェクトを介してデータを返すためにオブザーバー パターンを利用する一連のオブジェクトが含まれています。以下は、HttpServlet の doGet() メソッドの簡易バージョンです。
protected void doGet(final HttpServletRequest request, final HttpServletResponse response)
MyProcess process = new MyProcess();
// This following method spawns a few threads, so I use a listener to receive a completion event.
process.performAsynchronousMethod(request, new MyListener() {
public void processComplete(data) {
response.getWriter().print(data.toString());
}
}
}
例が示すように、実行するプロセスがあり、最終的なデータセットを生成するためにさまざまなスレッドを生成します。このプロセスには、数秒から 1 分かかる場合があります。私の問題は、doGet() メソッドが完了すると、応答オブジェクトが null になるように見えることです。processComplete() が呼び出されると、応答オブジェクトが null になるため、データを書き出すことができなくなります。
非同期メソッドが呼び出されるとすぐに、サーブレットが接続を閉じているように見えます。
非同期タスクにオブザーバー パターンを使用する場合、このタイプのサーブレットを実装するより良い方法はありますか? これを別の方法で行う必要がありますか?