我有一個Java HttpServlet。這個servlet包含一組使用觀察者模式的對象,以便通過servlet的Response對象返回數據。這是我的doGet()方法中的HttpServlet的一個簡化的版本:Java Servlet - Observer模式導致null響應對象
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());
}
}
}
如示例所示,我有執行一種方法,該產生一個各種線程的,以便產生一個最終的數據集。此過程可能需要幾秒到一分鐘的時間。我的問題是,看起來,隨着doGet()方法完成,響應對象變爲空。當調用processComplete()時,響應對象將爲空 - 從而阻止我寫出任何數據。
只要調用異步方法,servlet就會關閉連接。
當使用觀察者模式進行異步任務時,是否有更好的方式來實現這種類型的servlet?我應該以另一種方式來做這件事嗎?
這對我有效。謝謝!我只是將latch作爲參數傳遞給performInynchronousMethod()和countDown。 – 2013-04-05 13:11:11