我们的是一个 J2EE 应用程序,在 Websphere 6.1 上使用 Struts-EJB-Hibernate 而不是 Mainframe/DB2 后端,最近已投入生产。
当用户第一次登录到应用程序时,我们会收到过时的连接异常,或者有时会间歇性地发生此异常。
第二次尝试用户能够登录到应用程序。我收到的确切错误消息是
empcom.ibm.websphere.ce.cm.StaleConnectionException:
Execution failed due to a distribution protocol error that caused deallocation of the conversation.
The command requested could not be completed because of a permanent error condition detected at the target system.
DB2ConnectionCorrelator: AC100B80.A260.090107181206
我在 webshere 设置中启用了 PRETEST
选项 并将间隔设置为 60 秒,但我仍然遇到这个问题..
请分享你的观点并帮助我
如果您需要,我可以为您提供更多详细信息。
最佳答案
我们在早上第一次登录我们的一个生产系统时遇到了同样的问题。 解决方案是将连接池的最小大小设置为零。
将最小大小设置为大于零的值(例如,一个),当检测到超时连接无效时,它们将从池中删除,但其中一些(在上面的示例中,最后一个)仍然存在在池中(如果最小大小为 1,则一个连接保留在池中,即使它还不是有效连接)。
下一次应用程序请求连接时,将提供无效的连接,从而导致异常。
将最小大小设置为零,所有无效连接都从池中删除,因此提供给应用程序的连接不可能还无效(因为,如果它有效,它会留在池中,如果它不是,已从池中删除)。
使用预测试可能是一种有效的替代方法,但会花费额外的精力,因为每次将连接提供给应用程序时,都会进行测试。
关于java - 如何处理过时的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/486964/