JbossESB and Connection Pooling Problem
garuda Apr 8, 2009 4:24 AMHello Forum and experts,
I have some problems with JBossEsb Message store and Connection Pooling. Before I start to define my problem, the following assumptions:
- JbossEsb MessageStore is set up on Oracle Database.
- The message store datasoruce looks like this in jboss.esb\message-store-ds.xml:
<local-tx-datasource> <jndi-name>JBossESBDS</jndi-name> <!-- use for in-process db --> <connection-url>jdbc:oracle:thin:@xxx:yyy</connection-url> <!-- use for server mode (over tcp) <connection-url>jdbc:hsqldb:hsql://${jboss.esb.bind.address}:9001/</connection-url> --> <driver-class>oracle.jdbc.OracleDriver</driver-class> <user-name>xxxx</user-name> <password>yyyy</password> <min-pool-size>5</min-pool-size> <max-pool-size>20</max-pool-size> <idle-timeout-minutes>0</idle-timeout-minutes> <prepared-statement-cache-size>32</prepared-statement-cache-size> <connection-property name="autoReconnect">true</connection-property> <metadata> <type-mapping>Oracle10</type-mapping> </metadata> <check-valid-connection-sql>select 1 from dual</check-valid-connection-sql> </local-tx-datasource>
Now to the definition of my problem. The JBossESB works fine and all my services run correctly, but when oracle database is immediately showdown and restarted while JBossESB is running, this causes some problems with JbossEsb Message Store. If Oracle database is immediately shutdown I would expect that the message store - connection from the pool is closed and given back to the pool as it is not valid any more. I get the following warning in the server.log:
WARN [org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory] Destroying connection that is not valid, due to the following exception: oracle.jdbc.driver.T4CConnection@1abf87c
After successfully restarting the database, JBossEsb requests for a new connection at the datasource for JbossESB Message Store (JBOSSESBDS). Furthermore I would expect that JBOSSESBDS gets a new pooled connection from the pool. Still this results in the following warnings:
2009-04-04 21:22:15,350 WARN [org.jboss.resource.connectionmanager.JBossManagedConnectionPool] Unable to fill pool org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (java.sql.SQLException: Io exception: The Network Adapter could not establish the connection) at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:179) at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:577) at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.fillToMin(InternalManagedConnectionPool.java:524) at org.jboss.resource.connectionmanager.PoolFiller.run(PoolFiller.java:74) at java.lang.Thread.run(Thread.java:619) Caused by: java.sql.SQLException: Io exception: The Network Adapter could not establish the connection at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387) at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:441) at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:171) ... 4 more
Did JBOSSESBDS forget to give back the connection to the pool and still holds an old faulty, not valid conenction for JbossEsb ? Maybe I forget some hidden parmeter in the configuration, which can handle this ?
Best regards,
Dennis