Tak, możesz użyć menedżera transakcji zgodnego z JTA, takiego jak Atomikos lub Bitronix. Ich odpowiednie strony mają dokumentację, jak skonfigurować je za pomocą Spring. Ogólnie rzecz biorąc, będziesz musiał wykonać poniższe kroki (jeśli używasz Atomikos):
- Zachowaj istniejące źródło danych XA (
rtsDatasourcew twoim przypadku) lub utwórz je, jeśli jeszcze nie używasz (na przykład, jeśli ktoś ma źródło danych inne niż XA, to źródło danych musi najpierw zostać przekonwertowane na źródło danych XA). - Opakuj źródło danych XA w
AtomikosDataSourceBean. - Wskaż swoją
EntityManagerFactoryw nowymAtomikosDataSourceBeanprzykład. - Zadeklaruj menedżera transakcji XA i transakcję użytkownika XA.
- Opakuj menedżera transakcji XA w Spring
JtaTransactionManager. - Użyj Springa
JtaTransactionManager.
Poniżej pokazano krótki fragment konfiguracji z wykorzystaniem bazy danych H2, Hibernate 4, Spring 4 i 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"/>
Szczegółowe informacje znajdziesz w tej aplikacji .