With Spring
The advantage is that you don't need any JNDI server. The following XML snippet illustrates how to configure
Atomikos TransactionsEssentials® 3.1 or higher with Spring and Hibernate.
<?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>
Without Spring
See
Hibernate 3 Standalone sample for an example application that integrates with Hibernate (without Spring). This approach requires a JNDI server.
With JPA
See
http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/transactions.html for how to configure the JPA - this page suggests that there should be NO factory class configuration, only a lookup class. So for Hibernate JPA, the factory must be omitted in the above config examples.
With JPA and Infinispan as the Cache
See
http://javacodegeeks.blogspot.com/2010/06/gwt-spring-and-hibernate-enter-world-of.html for a blog post describing how to get this to work.
