Atomikos Forum |
|
I wonder if it is somehow possible to get automatic connection recovery once a database has restarted?
I'm using Atomikos Transaction Essentials 3.5.5. with Spring 2.5 and PostgreSQL database. Now I get exceptions stacks like these: 09:50:49,791 pool-1-thread-3 INFO org.hibernate.event.def.DefaultLoadEventListener - Error performing load command org.hibernate.exception.JDBCConnectionException: could not load an entity: [com.mydomain.MyObject#14950] Caused by: org.postgresql.util.PSQLException: An I/O error occured while sending to the backend. Caused by: java.net.SocketException: Broken pipe java.lang.IllegalStateException: This method needs a transaction for the calling thread and none exists. Possible causes: either you didn't start a transaction, it rolledback due to timeout, or it was committed already. ACTIONS: You can try one of the following: 1. Make sure you started a transaction for the thread. 2. Make sure you didn't terminate it yet. 3. Increase the transaction timeout to avoid automatic rollback of long transactions; check http://www.atomikos.org/forums/viewtopic.php?t=1259 for how to do this. Adriaan
That's not as easy as it sounds because we are using @Transactional annotations.
But I already found another solution: configure the testQuery on the com.atomikos.jdbc.AtomikosDataSourceBean When using spring it will be like this: <bean id="xaPoolDataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close"> <property name="xaDataSource" ref="postgresqlXADataSource" /> <property name="uniqueResourceName" value="atds-1"/> <property name="testQuery" value="SELECT 1"/> </bean>
Thanks,
I have added this tip to our doc wiki: http://www.atomikos.com/Documentation/KnownProblems#Connection_Recovery_with_Spring Cheers |