【发布时间】:2014-05-20 07:29:44
【问题描述】:
我一直在处理一个使用 wicket+JPA+springs 技术的应用程序。最近我们在日志中收到许多 5XX 错误(大于阈值)。在那段时间,由于我们的应用程序的后端 mainframe db2 的响应时间不稳定,存在一些一般性问题。 但是在主机好了之后这个应用服务器就再也没有恢复正常了。
有很多挂起的交易(来自我的应用程序)。 服务器中有很多线程可能被挂起。 由于用户将继续保持登录状态或在此期间访问应用程序中的链接,情况会变得更糟。
当我查看 webspehere 日志时,我发现了以下异常:
00000035 ThreadMonitor W WSVR0605W: Thread "WebContainer : 88" (000005ac)
has been active for 637111 milliseconds and may be hung.
There is/are 43 thread(s) in total in the server that may be hung.
在应用程序日志中我发现以下异常:
-->CouldNotLockPageException: Could not lock page 4. Attempt lasted 3 minutes
-->DefaultExceptionMapper - Connection lost, give up responding.
org.apache.wicket.protocol.http.servlet.ResponseIOException:
com.ibm.wsspi.webcontainer.ClosedConnectionException: OutputStream encountered error during
write.
--> JDBCExceptionReporter - [jcc][t4][2030][11211][3.67.27] A communication error occurred
during operations on the connection's underlying socket, socket input stream,
or socket output stream.
Error location: Reply.fill() - socketInputStream.read (-1). Message:
Connection reset. ERRORCODE=-4499, SQLSTATE=08001DSRA0010E: SQL State = 08001, Error Code = - 4.499
现在我们正在研究这个问题的解决方案。以下是我们目前正在考虑的两个解决方案。
1.我翻了很多论坛,发现每次遇到CouldNotLockPageException时,最好是invaidate session,强制用户登录页面。目前我们没有session invalidation(logout)机制,所以我们会实现那个。
2.我们需要实现事务超时,以便我们可以停止挂起事务。
我需要从 java 或服务器端解决这个问题。这里我们使用 wicket、jpa 和 springs 框架。我有几个问题。
1.我们如何在上述框架中实现事务超时?
2.无效会话是否可以停止挂起可能挂起的事务或线程?
【问题讨论】:
标签: java spring hibernate jpa transactions