Ano, můžete použít správce transakcí kompatibilní s JTA, jako je Atomikos nebo Bitronix. Jejich příslušné stránky mají dokumentaci o tom, jak je nakonfigurovat pomocí Spring. Obecně budete muset postupovat podle následujících kroků (pokud používáte Atomikos):
- Zachovejte svůj stávající zdroj dat XA (
rtsDatasource
ve vašem případě) nebo jej vytvořte, pokud jej ještě nepoužíváte (například pokud má někdo jiný zdroj dat než XA, musí být tento zdroj dat nejprve převeden na zdroj dat XA). - Zabalte zdroj dat XA do
AtomikosDataSourceBean
. - Nasměrujte svou
EntityManagerFactory
na novémAtomikosDataSourceBean
instance. - Deklarujte správce transakcí XA a uživatelskou transakci XA.
- Zabalte správce transakcí XA do Spring
JtaTransactionManager
. - Použijte Spring
JtaTransactionManager
.
Níže je uveden krátký konfigurační fragment využívající databázi H2, Hibernate 4, Spring 4 a Atomikos 4.
<bean class="org.h2.jdbcx.JdbcDataSource" id="originalDataStore" lazy-init="true">...</bean>
<bean class="com.atomikos.jdbc.AtomikosDataSourceBean" id="dataSource" init-method="init" destroy-method="close">
<property name="uniqueResourceName" value="xaDS"/>
<property name="xaDataSource" ref="originalDataStore"/>
<property name="poolSize" value="3"/>
</bean>
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="dataSource" ref="dataSource"/>
<property name="jpaProperties">
<props>
<prop key="hibernate.transaction.jta.platform">com.atomikos.icatch.jta.hibernate4.AtomikosPlatform</prop>
...
</props>
</property>
</bean>
<bean class="org.springframework.transaction.jta.JtaTransactionManager" id="transactionManager">
<property name="transactionManager">
<bean class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
<property name="forceShutdown" value="false"/>
</bean>
</property>
<property name="userTransaction">
<bean class="com.atomikos.icatch.jta.J2eeUserTransaction">
<property name="transactionTimeout" value="300"/>
</bean>
</property>
<property name="allowCustomIsolationLevels" value="true"/>
</bean>
<transaction:annotation-driven transaction-manager="transactionManager"/>
Podrobnosti najdete v této aplikaci .