0

我們運行的應用程序基於Struts 2.0。我們許多人同時訪問這個應用程序。大約在同一時間的每個晚上,應用程序都會受到拖延。如果我們在瀏覽器上重新加載應用程序,它永遠不會在登錄頁面之前移動。 看到服務器的日誌,我可以看到最後一條消息是「線程休眠」。IBM Websphere中的ConnectionWaitTimeoutException

在做一些研究時,我遇到了使用Spring框架的註解。 Struts2也有相同的工作嗎? 如果可能,請在struts文件中說明使用情況嗎?

[4/25/12 15:20:19:595 GMT+05:30] 00000029 SystemOut  O 25 Apr 2012 15:20:19,595 DEBUG [Thread-64][GreeceSynchronizer] thread sleep 
action [[email protected]] 
[4/25/12 15:20:26:293 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,293 DEBUG [WebContainer : 5][I18nInterceptor] intercept '//doLogin' { 
[4/25/12 15:20:26:293 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,293 DEBUG [WebContainer : 5][I18nInterceptor] requested_locale=null 
[4/25/12 15:20:26:293 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,293 DEBUG [WebContainer : 5][I18nInterceptor] before Locale=en_US 
[4/25/12 15:20:26:293 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,293 DEBUG [WebContainer : 5][InstantiatingNullHandler] Entering nullPropertyValue [target=[[email protected], [email protected]], property=struts] 
[4/25/12 15:20:26:294 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,294 DEBUG [WebContainer : 5][FileUploadInterceptor] Bypassing // doLogin 
[4/25/12 15:20:26:294 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,294 DEBUG [WebContainer : 5][StaticParametersInterceptor] Setting static parameters {} 
[4/25/12 15:20:26:294 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,294 DEBUG [WebContainer : 5][ParametersInterceptor] Setting params password => [ DEMO9 ] changePassword => [ false ] forgotPassword => [ ] username => [ DEMO9 ] 
[4/25/12 15:20:26:294 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,294 DEBUG [WebContainer : 5][XWorkConverter] Property: changePassword 
[4/25/12 15:20:26:294 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,294 DEBUG [WebContainer : 5][XWorkConverter] Class: cape.base.lbxoutclearing.ui.action.LoginAction 
[4/25/12 15:20:26:294 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,294 DEBUG [WebContainer : 5][XWorkConverter] field-level type converter for property [changePassword] = none found 
[4/25/12 15:20:26:294 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,294 DEBUG [WebContainer : 5][XWorkConverter] global-level type converter for property [changePassword] = none found 
[4/25/12 15:20:26:294 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,294 DEBUG [WebContainer : 5][XWorkConverter] falling back to default type converter [[email protected]] 
[4/25/12 15:20:26:294 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,294 DEBUG [WebContainer : 5][CompoundRootAccessor] No object in the CompoundRoot has a publicly accessible property named 'forgotPassword' (no setter could be found). 
[4/25/12 15:20:26:294 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,294 DEBUG [WebContainer : 5][CompoundRootAccessor] No object in the CompoundRoot has a publicly accessible property named 'password' (no setter could be found). 
[4/25/12 15:20:26:294 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,294 DEBUG [WebContainer : 5][CompoundRootAccessor] No object in the CompoundRoot has a publicly accessible property named 'username' (no setter could be found). 
[4/25/12 15:20:26:294 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,294 DEBUG [WebContainer : 5][LoginAction] Validating login 
[4/25/12 15:20:26:295 GMT+05:30] 00000030 SystemOut  O 25 Apr 2012 15:20:26,295 DEBUG [WebContainer : 5][LoginAction] 1 
[4/25/12 15:20:31:256 GMT+05:30] 00000036 FreePool  E J2CA0045E: Connection not available while invoking method createOrWaitForConnection for resource lockBoxDSJNDI. 
[4/25/12 15:20:31:292 GMT+05:30] 00000036 SystemOut  O 25 Apr 2012 15:20:31,289 ERROR [WebContainer : 8][BaseDAO] Exception in getConnection() 
com.ibm.websphere.ce.cm.ConnectionWaitTimeoutException: Connection not available, Timed out waiting for 180007 
    at com.ibm.ws.rsadapter.AdapterUtil.toSQLException(AdapterUtil.java:1252) 
    at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:444) 
    at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:400) 
    at cape.base.lbxoutclearing.ui.dao.BaseDAO.getConnection(BaseDAO.java:49) 
Caused by: com.ibm.websphere.ce.j2c.ConnectionWaitTimeoutException: Connection not available, Timed out waiting for 180007 
    at com.ibm.ejs.j2c.FreePool.createOrWaitForConnection(FreePool.java:1496) 
    at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:2273) 
    at com.ibm.ejs.j2c.ConnectionManager.allocateMCWrapper(ConnectionManager.java:903) 
    at com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:603) 
    at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:431) 
    ... 130 more 

回答

2

這與Struts/Spring無關。

容器WAS說​​它無法從連接池中獲得連接。

在數據源上指定Connectiontimeout期間。如果在等待那段時間後,如果WAS運行時無法爲您的應用程序提供來自池的連接,則會引發此異常。

你必須找出誰在抓住池中的連接並確保連接被釋放。

使用此跟蹤字符串ConnLeakLogic = finest打開跟蹤。發生此異常時,它會轉儲列出當時正在使用連接的所有線程的狀態。這應該是你的起點。

HTH

Manglu