簡體   English   中英

從另一個Java Servlet激活Java Servlet

[英]Activate a Java Servlet from another Java Servlet

我的問題是:
在拋出DeadlineExceededException之前, Google App Engine僅允許cron作業激活30秒。 從這個角度來看,我的應用不適合google app引擎平台,需要調用一項耗時的cron作業。
我想到的一個解決方案是調用另一個Servlet(Servlet2),然后讓Servlet2為我完成工作,Servlet_2將是常規的Java Servlet。
為此,我正在考慮從我的cron作業Servlet_1創建一個會話 ,調用另一個Servlet_2,測試該會話,然后讓服務器執行所需的作業,最后使該會話無效。
來自Servlet_1的調用不應重定向到Servlet_2,因為那樣會使我再次回到第一方。
現在我的問題是:您認為這行得通嗎? 如果可以,並且即使DeadlineExceededException可以實現,那么即使我將所有代碼都放在Servlet_2的destroy方法中,Servlet_2也會停止工作嗎?
我的代碼:


//Servlet_1
try {
   HttpSession session = request.getSession(true);
   session.setAttribute("referingPage", "server is calling");
   request.getRequestDispatcher("/Servlet_2.do").forward(request, response);
}catch(DeadlineExceededException e) {
   e.printStackTrace();
}
 //Servlet_2 @Override public void destroy() { HttpSession session = request.getSession(true); String value = (String)session.getAttribute("referringPage"); if(value.equals("server is calling")) { // Do the time demanding stuff } session.invalidate(); } 

將不勝感激!

為什么不使用任務隊列。 您將一個任務放在隊列中-它會工作29秒,然后停止,但是在停止之前,它將另一個任務放在隊列中。 只要負載有一個標記來指示從何處重新啟動,那么您就可以擁有一組鏈接的任務,這些任務可以持續運行很長時間,只要您要消耗(並為之付費)CPU。

您只有30秒的時間來完成執行,因此無法解決。 進行轉發不會產生新線程或其他任何東西,它仍會在30秒的時間限制內執行。

我會嘗試找出一些方法來序列化您正在做的事情,或者暫停它,並將您的狀態保留在內存緩存中。 當您再次開始處理時,請檢查內存緩存以查看是否需要從上次中斷的地方領取表格。

Google App Engine正在運行長期運行的后台程序,希望不久以后能提出解決方案。 我在同一條船上。

標記

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM