Hi,
We have a java application which uses Oracle Connection pool for pooling the connection used by application.
At times, oracle server goes down and all the connections are broken.
In application, we start receiving exception about the broken connection.
Now using this exception, we have written code in the application to purge the connection pool so that new pool can be created whenever oracle server is available.
Issue is, at time, all the threads of application get stuck. Few threads are stuck in purging the pool, rest of the threads are stuck in creating the connection pool.
Due to this, whenever oracle server is restarted, application also has to be restarted.
JDBC jar version : 11.2.0.2.0
Please let me know if more details are required.
Below is theaddump snapshot of the application thread.
"Timer-11" id=82 idx=0x178 tid=1359 prio=5 alive, in native
at jrockit/net/SocketNativeIO.readBytesPinned(Ljava/io/FileDescriptor;[BIII)I(Native Method)
at jrockit/net/SocketNativeIO.socketRead(SocketNativeIO.java:32)
at java/net/SocketInputStream.socketRead0(Ljava/io/FileDescriptor;[BIII)I(SocketInputStream.java)
at java/net/SocketInputStream.read(SocketInputStream.java:129)
at oracle/net/ns/Packet.receive(Packet.java:283)
at oracle/net/ns/DataPacket.receive(DataPacket.java:103)
at oracle/net/ns/NetInputStream.getNextPacket(NetInputStream.java:230)
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/T4C7Ocommoncall.doOLOGOFF(T4C7Ocommoncall.java:61)
at oracle/jdbc/driver/T4CConnection.logoff(T4CConnection.java:498)
^-- Holding lock: oracle/jdbc/driver/T4CConnection@0x146756e88[recursive]
at oracle/jdbc/driver/PhysicalConnection.close(PhysicalConnection.java:3931)
^-- Holding lock: oracle/jdbc/driver/T4CConnection@0x146756e88[thin lock]
at oracle/jdbc/pool/OraclePooledConnection.close(OraclePooledConnection.java:254)
^-- Holding lock: oracle/jdbc/pool/OraclePooledConnection@0x146753a20[thin lock]
at oracle/jdbc/pool/OracleImplicitConnectionCache.actualPooledConnectionClose(OracleImplicitConnectionCache.java:2876)
at oracle/jdbc/pool/OracleImplicitConnectionCache.closeAndRemovePooledConnection(OracleImplicitConnectionCache.java:2806)
^-- Holding lock: oracle/jdbc/pool/OracleImplicitConnectionCache@0x146a24f90[recursive]
at oracle/jdbc/pool/OracleImplicitConnectionCache.performPooledConnectionTask(OracleImplicitConnectionCache.java:1252)
at oracle/jdbc/pool/OracleImplicitConnectionCache.doForEveryCachedConnection(OracleImplicitConnectionCache.java:1100)
^-- Holding lock: oracle/jdbc/pool/OracleImplicitConnectionCache@0x146a24f90[fat lock]
at oracle/jdbc/pool/OracleImplicitConnectionCache.purgeCacheConnections(OracleImplicitConnectionCache.java:3071)
at oracle/jdbc/pool/OracleConnectionCacheManager.purgeCache(OracleConnectionCacheManager.java:580)
"CONN-POOL-THR-2" id=112 idx=0x1f0 tid=8789 prio=7 alive, blocked, native_blocked
-- Blocked trying to get lock: oracle/jdbc/pool/OracleImplicitConnectionCache@0x145f5d308[thin lock]
at jrockit/vm/Threads.sleep(I)V(Native Method)
at jrockit/vm/Locks.waitForThinRelease(Locks.java:955)
at jrockit/vm/Locks.monitorEnterSecondStageHard(Locks.java:1083)
at jrockit/vm/Locks.monitorEnterSecondStage(Locks.java:1005)
at jrockit/vm/Locks.monitorEnter(Locks.java:2179)
at oracle/jdbc/pool/OracleImplicitConnectionCache.retrieveCacheConnection(OracleImplicitConnectionCache.java:566)
at oracle/jdbc/pool/OracleImplicitConnectionCache.getCacheConnection(OracleImplicitConnectionCache.java:471)
at oracle/jdbc/pool/OracleImplicitConnectionCache.getConnection(OracleImplicitConnectionCache.java:357)
at oracle/jdbc/pool/OracleDataSource.getConnection(OracleDataSource.java:395)
at oracle/jdbc/pool/OracleDataSource.getConnection(OracleDataSource.java:179)
at oracle/jdbc/pool/OracleDataSource.getConnection(OracleDataSource.java:157)