如何处理陈旧的连接?

时间:2009-01-28 09:05:18

标签: java hibernate exception web-applications db2

我们是一个J2EE应用程序,在大型机/ DB2后端的Websphere 6.1上使用Struts-EJB-Hibernate,最近已转移到生产环境。

当用户第一次登录应用程序或有时间歇性地发生此异常时,我们会收到过时的连接异常

第二次尝试用户能够登录到应用程序。我得到的确切错误信息是

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秒,但我仍然遇到此问题..

请分享您的观点并帮助我

如果需要,我可以为您提供更多详细信息。

2 个答案:

答案 0 :(得分:8)

我们在其中一个生产系统上首次登录时遇到了同样的问题。 解决方案是将连接池的最小大小设置为零。

如果将最小大小设置为大于零的值(例如,一个),则当它们被检测为无效时,会从池中删除超时连接,但其中一些(在上面的示例中,最后一个)仍然存在在池中(如果最小大小为1,则一个连接保留在池中,即使它还不是有效连接)。

下次应用程序请求连接时,将提供无效的连接,从而导致异常。

将最小大小设置为零,从池中删除所有无效连接,因此提供给应用程序的连接不可能有效(因为,如果它有效,它将保留在池中,如果它不是,从池中删除。)

使用预测试可能是一种有效的替代方案,但需要额外的努力,因为每次为应用程序提供连接时,都会进行测试。

答案 1 :(得分:1)

我得到了这个答案

使用pretest旧连接和新连接我们可以解决这个问题..预测试查询应该是一个基本查询(从..中选择sysdate)随时运行..

和时间间隔应该是最大的,因此应用程序服务器不会得到开销