0

当我尝试使用连接池对象在 DB2 中执行查询时,我遇到了严重的问题。我的应用程序部署在 WebSphere 7 中并位于 AIX 机器上,而 DB2 正在运行另一个 AIX 机器。问题是间歇性的。当我搜索server.log文件时,我得到了以下异常捕获。

java.net.SocketException: There is no process to read data written to a pipe. at 
java.net.SocketOutputStream.socketWrite0(Native Method) at 
java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:103) at 
java.net.SocketOutputStream.write(SocketOutputStream.java:147) at 
com.ibm.db2.jcc.t4.fb.b(fb.java:1685) at 
com.ibm.db2.jcc.t4.fb.a(fb.java:1633) at 
com.ibm.db2.jcc.t4.a.D(a.java:416) at 
com.ibm.db2.jcc.t4.a.r(a.java:380) at 
com.ibm.db2.jcc.am.n.a(n.java:219) at
com.ibm.db2.jcc.am.go.b(go.java:4302) at 
com.ibm.db2.jcc.am.go.fc(go.java:741) at 
com.ibm.db2.jcc.am.go.executeQuery(go.java:711)

但是如果我尝试创建一个连接对象,则不会出现上述问题,只有现有连接池对象存在问题。

4

1 回答 1

0

在分析连接对象后,我已经修复了它。基本上有时连接池对象会出现问题,连接对象不会关闭,但系统 IO 可能会导致上述问题。要解决此问题,只需使用 JDBC Api connection.isValid(0) 验证连接。如果您将值提供为 o ,则表示没有指定执行超时,基本上上述方法验证连接管道是否按预期工作。如果它返回 true 则没有问题,我们可以使用返回 false 的相同对象,然后编写适当的逻辑来创建连接对象。

于 2013-03-12T17:37:43.887 回答