public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if ((request instanceof HttpServletRequest)
&& (response instanceof HttpServletResponse)) {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
if (isSessionControlRequiredForThisResource(httpServletRequest)) {
if (isSessionInvalid(httpServletRequest)) {
String encodedURL = httpServletRequest.getContextPath() + this.timeoutPage;
try {
httpServletResponse.sendRedirect(encodedURL);
} catch (Exception e) {
logger.error("[Error happened in filter] : ", e.fillInStackTrace());
}
return;
}
}
if (!httpServletRequest.getRequestURI().startsWith(httpServletRequest.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) {
httpServletResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
}
}
chain.doFilter(request, response);
}
上面顯示的代碼可能會在執行任務期間失敗,導致SystemOut.log
中顯示以下錯誤。是否有診斷WebSphere中發生線程掛起的做法?
[13年8月26日8:38:39:873 MYT] 0000002c ThreadMonitorW¯¯WSVR0605W:螺紋 「Web容器:9」(00000037)已活躍611221毫秒 並且可以被掛起。總共有7個線程在服務器中,可能會掛起 。
診斷這個錯誤並不容易,因爲這總是會跟隨一個非常長的堆棧跟蹤列表,它不屬於我的應用程序。通常它可能會在特定的時間段(大約15到20分鐘)內發生幾次,但線程ID可能不同。
我無法在UAT服務器的單元測試中模擬這個,我不確定這個問題的根本原因是什麼。它偶爾會發生。有沒有一種模式來捕捉這個錯誤?這是否發生在發生其他異常之後,說數據庫連接已經丟失,或者可能是一些後臺進程正在運行,比如說在生產服務器中檢索巨大的結果集?我只是想了解什麼情況會導致這個問題,以便在編碼時避免這種情況。
您是否手動創建線程orso? – BalusC
沒有。我確信應用程序中沒有線程。 – huahsin68