gpt4 book ai didi

java - 如何处理: Communication link failure

转载 作者:搜寻专家 更新时间:2023-11-01 03:45:39 25 4
gpt4 key购买 nike

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

错误 500:请求处理失败;嵌套异常是 org.springframework.dao.DataAccessResourceFailureException: 无法执行查询;嵌套异常是 org.hibernate.exception.JDBCConnectionException: 无法执行查询

我检查了 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”。我打算让应用程序保持运行状态,然后在上午再次检查它。将发布结果更新。

更新#2:

使用 dbcp-commons BasicDataSource 似乎可以解决这个问题,这似乎是一个网络问题。 Websphere 有连接池,如果 AS400 端出现网络问题,它会尝试使用它拥有的连接,但它不知道这个连接是否“过时”。使用具有时间间隔的 validationQuery 是解决此问题的一种廉价(但有效)的方法——但在 Websphere 端,在配置下可能有更好的方法。但是,最好不要更改未损坏的内容,因此在失败之前,这可能是我们 future 的解决方案。

最佳答案

啊,这就是我要说的……问题必须在连接池中解决,方法是在返回连接之前验证连接。 DBCP有validationQuery,JBoss也有类似的东西;我确信 Websphere 的连接池中必须有类似的东西,以便在分发连接之前验证连接。即使你不使用 testWhileIdle,如果发现连接无效,池也会创建一个新的并交给你,而不是无效的。

关于java - 如何处理: Communication link failure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/298988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com