Otherwise, you will exhaust the connection pool.
hibernate.connection.handling_mode=DELAYED_ACQUISITION_AND_RELEASE_AFTER_STATEMENT
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- configure an Atomikos JTA-aware datasource -->
<bean id="datasource"
class="com.atomikos.jdbc.AtomikosDataSourceBean"
init-method="init" destroy-method="close">
<!-- set an arbitrary but unique name for the datasource -->
<property name="uniqueResourceName"><value>XADBMS</value></property>
<!--
set the underlying driver class to use,
in this example case we use Oracle
-->
<property name="xaDataSourceClassName">
<value>oracle.jdbc.xa.client.OracleXADataSource</value>
</property>
<property name="xaProperties">
<!--
set the driver-specific XADataSource properties
(check your driver docs for more info)
-->
<props>
<prop key="user">scott</prop>
<prop key="password">tiger</prop>
<prop key="URL">...</prop>
</props>
</property>
<!-- how many connections in the pool? -->
<property name="poolSize" value="3"/>
</bean>
<!--
configure Hibernate to use the Atomikos JTA and
datasource for transaction control
-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!--
NOTE: for hibernate 2, use the following class:
org.springframework.orm.hibernate.LocalSessionFactoryBean
-->
<!-- add the mapped resources (hbm files) of your application -->
<property name="mappingResources">
<list>
<value>...</value>
</list>
</property>
<!--
make sure that hibernate uses the
Atomikos datasource (JTA enabled)!
-->
<property name="dataSource"><ref bean="datasource"/></property>
<!-- configure hibernate to use Atomikos TransactionsEssentials -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.transaction.factory_class">
com.atomikos.icatch.jta.hibernate3.AtomikosJTATransactionFactory
</prop>
<prop key="hibernate.transaction.manager_lookup_class">
com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup
</prop>
<!-- for hibernate 2, use the following:
<prop key="hibernate.transaction.manager_lookup_class">
com.atomikos.icatch.jta.hibernate.TransactionManagerLookup
</prop>
-->
<!-- add any other hibernate properties you need -->
</props>
</property>
</bean>
<!--
configure the Spring hibernate template with the session factory from above
-->
<bean id="hibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory"><ref bean="sessionFactory"/></property>
</bean>
</beans>
Also see http://fogbugz.atomikos.com/default.asp?community.6.3045.1 for a forum post describing possible issues with the connection release configuration of Hibernate.