Oracle
 sql >> Base de données >  >> RDS >> Oracle

Définir une source de données jta en dehors du conteneur

Oui, vous pouvez utiliser un gestionnaire de transactions compatible JTA comme Atomikos ou Bitronix. Leurs sites respectifs contiennent de la documentation sur la façon de les configurer avec Spring. En général, vous devrez suivre les étapes ci-dessous (si vous utilisez Atomikos) :

  1. Conservez votre source de données XA existante (rtsDatasource dans votre cas) ou créez-en une si vous ne l'utilisez pas déjà (par exemple, si quelqu'un a une source de données non-XA, cette source de données doit d'abord être convertie en une source de données XA).
  2. Enveloppez la source de données XA dans un AtomikosDataSourceBean .
  3. Pointez votre EntityManagerFactory au nouveau AtomikosDataSourceBean exemple.
  4. Déclarez un gestionnaire de transactions XA et une transaction utilisateur XA.
  5. Enveloppez le gestionnaire de transactions XA dans un Spring JtaTransactionManager .
  6. Utiliser le Spring JtaTransactionManager .

Un court extrait de configuration utilisant la base de données H2, Hibernate 4, Spring 4 et Atomikos 4 est présenté ci-dessous.

<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"/>

Pour plus de détails, vous pouvez voir cette application .