sql >> Base de Datos >  >> RDS >> Oracle

Definición de una fuente de datos jta fuera del contenedor

Sí, puede usar un administrador de transacciones compatible con JTA como Atomikos o Bitronix. Sus respectivos sitios tienen documentación sobre cómo configurarlos con Spring. En general, deberá seguir los pasos que se detallan a continuación (si usa Atomikos):

  1. Conserve su fuente de datos XA existente (rtsDatasource en su caso) o cree uno si aún no lo está usando (por ejemplo, si alguien tiene una fuente de datos que no sea XA, esa fuente de datos debe convertirse primero en una fuente de datos XA).
  2. Envuelva la fuente de datos XA en un AtomikosDataSourceBean .
  3. Apunte su EntityManagerFactory en el nuevo AtomikosDataSourceBean instancia.
  4. Declare un administrador de transacciones XA y una transacción de usuario XA.
  5. Envuelva el administrador de transacciones XA en un Spring JtaTransactionManager .
  6. Utilice Spring JtaTransactionManager .

A continuación se muestra un breve fragmento de configuración que usa la base de datos H2, Hibernate 4, Spring 4 y 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"/>

Para obtener más información, puede ver esta aplicación .