"Suspend Checker Thread" prio=10 tid=0xaa178 nid=0x9 runnable
<Oct 11, 2002 1:24:19 PM EDT> <Alert> <JMS> <JMSServer "COServer", store
failure while writing message for topic COJMSTopic, java.io.IOException:
JMS JDBC store, connection pool = <COPool>, prefix = <null>: write failed
java.sql.SQLException: Io exception: Connection timed out: Connection
timed out
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:323)
at
oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:1460)
at
oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1371)
at
oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1900)
at
oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:363)
at weblogic.jdbc.pool.Statement.executeUpdate(Statement.java:293)
at weblogic.jms.store.JDBCIOStream.write(JDBCIOStream.java:344)
at weblogic.jms.store.StoreRequest.doTheIO(StoreRequest.java:250)
at weblogic.jms.store.JMSStore.execute(JMSStore.java:182)
While the EJB is blocked, the thread dump for the blocked thread looks like:
"ExecuteThread: '95' for queue: 'default'" daemon prio=5 tid=0x453cb0
nid=0x6c waiting on monitor [0xe8a7f000..0xe8a819e0]
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:420)
at
weblogic.jms.dispatcher.Request.sleepTillNotified(Request.java:198)
at
weblogic.jms.dispatcher.Request.wrappedFiniteStateMachine(Request.java:606)
at
weblogic.jms.dispatcher.DispatcherImpl.dispatchAsync(DispatcherImpl.java:149)
at weblogic.jms.dispatcher.Request.dispatchAsync(Request.java:734)
at weblogic.jms.frontend.FEProducer.send(FEProducer.java:240)
at weblogic.jms.frontend.FEProducer.invoke(FEProducer.java:291)
at
weblogic.jms.dispatcher.Request.wrappedFiniteStateMachine(Request.java:510)
at
weblogic.jms.dispatcher.DispatcherImpl.dispatchSyncNoTran(DispatcherImpl.java:332)
at
weblogic.jms.client.JMSProducer.sendMessage(JMSProducer.java:269)
at weblogic.jms.client.JMSProducer.publish(JMSProducer.java:114)
at
com.concentra.claimops.communication.eventpublisherejb.EventPublisherEJB.publishMessage(EventPublisherEJB.java:148)
....cut for brevity......
This doesn't appear to be a dead-lock so much as database timeout. Is
the database connection idle for a long while before this call?
Is it possible your network between the database and JMS is unreliable?
Tom
The only why to keep the connection alive otherwise is to either:
A) tune the database or perhaps the driver to increase the timeout
for idle connections (not sure how, database specific)
B) force JMS to hit the database periodically, either via sending then
removing a persistent message on an unused destination
or by configuring an unused topic, and then creating or
removing a durable subscription...
Tom, BEA