Oracle
 sql >> Database >  >> RDS >> Oracle

Definizione di un'origine dati jta al di fuori del contenitore

Sì, puoi utilizzare un gestore di transazioni conforme a JTA come Atomikos o Bitronix. I rispettivi siti hanno la documentazione su come configurarli con Spring. In generale, dovrai seguire i passaggi indicati di seguito (se utilizzi Atomikos):

  1. Mantieni l'origine dati XA esistente (rtsDatasource nel tuo caso) o crearne uno se non lo stai già utilizzando (ad esempio, se qualcuno ha un'origine dati non XA, tale origine dati deve essere prima convertita in un'origine dati XA).
  2. Avvolgi l'origine dati XA in un AtomikosDataSourceBean .
  3. Punta il tuo EntityManagerFactory al nuovo AtomikosDataSourceBean esempio.
  4. Dichiara un gestore transazioni XA e una transazione utente XA.
  5. Avvolgi il gestore delle transazioni XA in un JtaTransactionManager di primavera .
  6. Usa il JtaTransactionManager di primavera .

Di seguito è mostrato un breve frammento di configurazione che utilizza il database H2, Hibernate 4, Spring 4 e 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"/>

Per i dettagli, puoi vedere questa app .