Oracle 每个测试套件中的第一个测试无法连接到数据库

Oracle 每个测试套件中的第一个测试无法连接到数据库,oracle,ant,jdbc,junit,hudson,Oracle,Ant,Jdbc,Junit,Hudson,我们正在运行2000多个junit,大多数测试通过jdbc调用连接到Oracle数据库。由于某些原因,很少的测试无法连接到DB,我们遇到了一个问题。以下是一些背景: 我们正在CI服务器中运行测试-Jenkins 测试由ANT使用任务和fork=“true” 只有少数测试失败,因为无法连接到数据库错误,不一致,有时失败,有时不一致 失败的测试通常是每个测试套件中的第一个测试 其他也连接到db的测试不会失败 到目前为止,我们还没有幸运地解决它。 有人遇到过类似的事情吗 以下是堆栈跟踪: Erro

我们正在运行2000多个junit,大多数测试通过jdbc调用连接到Oracle数据库。由于某些原因,很少的测试无法连接到DB,我们遇到了一个问题。以下是一些背景:

  • 我们正在CI服务器中运行测试-
    Jenkins
  • 测试由ANT使用
    任务和
    fork=“true”
  • 只有少数测试失败,因为
    无法连接到数据库
    错误,不一致,有时失败,有时不一致
  • 失败的测试通常是每个测试套件中的第一个测试
  • 其他也连接到db的测试不会失败
到目前为止,我们还没有幸运地解决它。 有人遇到过类似的事情吗

以下是堆栈跟踪:

Error Message

Could not connect to database using the connect string jdbc:oracle:thin:R71/R71@abc.def:1521:DB11g
Stacktrace

java.lang.RuntimeException: Could not connect to database using the connect string jdbc:oracle:thin:R71/R71@abc.def:1521:DB11g
    at com.abc.common.dao.JDBCUtils.getThinConnection(JDBCUtils.java:257)
    at com.abc.common.dao.JDBCUtils.getConnection(JDBCUtils.java:115)
    at com.abc.common.dao.JDBCUtils.queryForInt(JDBCUtils.java:714)
    at com.abc.test.utils.MetaDataLanguageDBTest.testMetaDataLanguages(MetaDataLanguageDBTest.java:13)
Caused by: java.sql.SQLRecoverableException: IO Error: Connection reset
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:428)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:536)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    at com.abc.common.dao.JDBCUtils.getThinConnection(JDBCUtils.java:254)
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:96)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at oracle.net.ns.DataPacket.send(DataPacket.java:199)
    at oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:211)
    at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:227)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:175)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:100)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:85)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:123)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:79)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1122)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1099)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:288)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:366)
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:752)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:366)
Standard Error

java.sql.SQLRecoverableException: IO Error: Connection reset
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:428)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:536)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    at com.abc.common.dao.JDBCUtils.getThinConnection(JDBCUtils.java:254)
    at com.abc.common.dao.JDBCUtils.getConnection(JDBCUtils.java:115)
    at com.abc.common.dao.JDBCUtils.queryForInt(JDBCUtils.java:714)
    at com.abc.test.utils.MetaDataLanguageDBTest.testMetaDataLanguages(MetaDataLanguageDBTest.java:13)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at junit.framework.TestCase.runTest(TestCase.java:154)
    at junit.framework.TestCase.runBare(TestCase.java:127)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:118)
    at junit.framework.TestSuite.runTest(TestSuite.java:208)
    at junit.framework.TestSuite.run(TestSuite.java:203)
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:421)
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:912)
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:766)
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:96)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at oracle.net.ns.DataPacket.send(DataPacket.java:199)
    at oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:211)
    at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:227)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:175)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:100)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:85)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:123)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:79)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1122)
    at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1099)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:288)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:366)
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:752)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:366)
    ... 25 more
错误消息
无法使用连接字符串jdbc:oracle:thin:R71连接到数据库/R71@abc.def:1521:DB11g
堆栈跟踪
java.lang.RuntimeException:无法使用连接字符串jdbc:oracle:thin:R71连接到数据库/R71@abc.def:1521:DB11g
位于com.abc.common.dao.JDBCUtils.getThinConnection(JDBCUtils.java:257)
位于com.abc.common.dao.JDBCUtils.getConnection(JDBCUtils.java:115)
位于com.abc.common.dao.JDBCUtils.queryForInt(JDBCUtils.java:714)
位于com.abc.test.utils.MetaDataLanguageDBTest.testMetaDataLanguages(MetaDataLanguageDBTest.java:13)
原因:java.sql.SQLRecoverableException:IO错误:连接重置
位于oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:428)
位于oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:536)
位于oracle.jdbc.driver.T4CConnection(T4CConnection.java:228)
位于oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
位于oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
位于java.sql.DriverManager.getConnection(DriverManager.java:582)
位于java.sql.DriverManager.getConnection(DriverManager.java:207)
位于com.abc.common.dao.JDBCUtils.getThinConnection(JDBCUtils.java:254)
原因:java.net.SocketException:连接重置
位于java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:96)
位于java.net.SocketOutputStream.write(SocketOutputStream.java:136)
位于oracle.net.ns.DataPacket.send(DataPacket.java:199)
位于oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:211)
位于oracle.net.ns.NetInputStream.getNextPackage(NetInputStream.java:227)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:175)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:100)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:85)
位于oracle.jdbc.driver.T4CSocketInputStreamWrapper.readnextPackage(T4CSocketInputStreamWrapper.java:123)
位于oracle.jdbc.driver.t4CSocketingInputStreamWrapper.read(t4CSocketingInputStreamWrapper.java:79)
位于oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1122)
位于oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1099)
位于oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:288)
位于oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
位于oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:366)
位于oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:752)
位于oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:366)
标准误差
java.sql.SQLRecoverableException:IO错误:连接重置
位于oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:428)
位于oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:536)
位于oracle.jdbc.driver.T4CConnection(T4CConnection.java:228)
位于oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
位于oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
位于java.sql.DriverManager.getConnection(DriverManager.java:582)
位于java.sql.DriverManager.getConnection(DriverManager.java:207)
位于com.abc.common.dao.JDBCUtils.getThinConnection(JDBCUtils.java:254)
位于com.abc.common.dao.JDBCUtils.getConnection(JDBCUtils.java:115)
位于com.abc.common.dao.JDBCUtils.queryForInt(JDBCUtils.java:714)
位于com.abc.test.utils.MetaDataLanguageDBTest.testMetaDataLanguages(MetaDataLanguageDBTest.java:13)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于junit.framework.TestCase.runTest(TestCase.java:154)
位于junit.framework.TestCase.runBare(TestCase.java:127)
位于junit.framework.TestResult$1.protect(TestResult.java:106)
位于junit.framework.TestResult.runProtected(TestResult.java:124)
运行(TestResult.java:109)
运行(TestCase.java:118)
位于junit.framework.TestSuite.runTest(TestSuite.java:208)
运行(TestSuite.java:203)
位于org.apache.tools.ant.taskdefs.optional.junit.junitestrunner.run(junitestrunner.java:421)
位于org.apache.tools.ant.taskdefs.optional.junit.junitestrunner.launch(junitestrunner.java:912)
位于org.apache.tools.ant.taskdefs.optional.junit.junitestrunner.main(junitestrunner.java:766)
原因:java.net.SocketException:连接重置
位于java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:96)
位于java.net.SocketOutputStream.write(SocketOutputStream.java:136)
位于oracle.net.ns.DataPacket.send(DataPacket.java:199)
位于oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:211)
位于oracle.net.ns.NetInputStream.getNextPackage(NetInputStream.java:227)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:175)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:100)
位于oracle.net.ns.NetInputStream.read(NetInputStream.java:85)
-Djava.security.egd=file:///dev/urandom