java - 如何处理过时的连接?

标签 java hibernate exception web-applications db2

我们的是一个 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/

相关文章:

java - ScheduledThreadPoolExecutor 停止执行并捕获异常

java - Java 中的 HashMap 无法散列 MyObject

java - 无法使用Java在Android Studio中使用HTTP POST将JSON发送到我的服务器

java - Spring PROPAGATION_SUPPORTS 事务只读,你需要提交吗?

ruby - 如何从救援内部救援异常

java - 将新项目添加到数组时ArrayIndexOutOfBounds?

java - 随机检查数组列表中的对象

java - Spring声明式事务管理: multiple pointcuts

spring - 难以使用测试代码验证事务内的 hibernate 更新查询

java - hibernate : Why is it trying to drop/create database on startup?