繁体   English   中英

如何处理:通信链路故障

[英]How to handle: Communication link failure

我们使用的是Spring 2.5.4 / Hibernate 3.2 / Websphere Application Server 6.1.0.17。 我们已经在AIX机器上部署了该应用程序。 第二天,当我进来时,我尝试登录应用程序。 我在页面上遇到此异常:

Error 500: Request processing failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: could not execute query; nested exception is org.hibernate.exception.JDBCConnectionException: could not execute query

我检查了System.Out日志并查看更多详细信息。 (使用了pastebin,因为日志格式化确实搞砸了页面布局)


导致我们异常的代码行是:

List loginList = getHibernateTemplate().find("from Login  
    where storeId =" + id + " and password ='" + password + "'");

我们在Spring的applicationContext.xml中连接连接。 我们知道AS400上的连接有时会丢失(它们可能会在一夜之间重启系统 - 我不确定)。 但是,当我们连接applicationContext中的所有内容时,我们最好不要打开新连接。

无论使用DataSource / JNDI还是JDBC,都会出现此问题

有没有人知道要添加到Spring或Hibernate的任何设置来检查连接是否过时,如果是,请删除它并创建一个新的? 或者其他任何想法来解决这个问题? 如果您需要更多信息/代码,请与我们联系。

非常感激,

克里斯

更新:

查看了Spring社区论坛上的一些帖子,我用commons-dbcp实现了我的DataSource,它有一些属性,比如'testWhileIdle'和'validationQuery'。 我要让应用程序继续运行并在AM中再次检查它。 将发布结果更新。

更新#2:

使用dbcp-commons BasicDataSource似乎可以解决这个问题,这似乎是一个网络问题。 Websphere已经汇集了连接,如果AS400端存在网络问题,它将尝试使用它具有的连接,它不知道是“陈旧”。 使用带有时间间隔的validationQuery是解决此问题的一种廉价(但有效)的方法 - 但在配置下,Websphere端可能有更好的方法。 但是,不妨改变那些没有被破坏的东西,所以直到失败,这可能是我们未来的解决方案。

啊,这就是我要说的......问题必须在连接池中解决,通过在返回之前验证连接。 DBCP有validationQuery,JBoss也有类似的东西; 我确信Websphere必须在其连接池中有类似的东西才能在发送之前验证连接。 即使您不使用testWhileIdle,如果发现连接无效,也会创建一个新连接并由池传递给您而不是无效的连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM