Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Definindo uma fonte de dados jta fora do contêiner


Sim, você pode usar um gerenciador de transações compatível com JTA, como Atomikos ou Bitronix. Seus respectivos sites possuem documentação sobre como configurá-los com Spring. Em geral, você terá que seguir as etapas abaixo (se estiver usando o Atomikos):
  1. Mantenha sua fonte de dados XA existente (rtsDatasource no seu caso) ou crie uma se ainda não estiver usando (por exemplo, se alguém tiver uma fonte de dados não-XA, essa fonte de dados deverá ser convertida em uma fonte de dados XA primeiro).
  2. Envolva a fonte de dados XA em um AtomikosDataSourceBean .
  3. Aponte sua EntityManagerFactory no novo AtomikosDataSourceBean instância.
  4. Declare um gerenciador de transações XA e uma transação de usuário XA.
  5. Envolva o gerenciador de transações XA em um Spring JtaTransactionManager .
  6. Use o Spring JtaTransactionManager .

Um pequeno trecho de configuração usando o banco de dados H2, Hibernate 4, Spring 4 e Atomikos 4 é mostrado abaixo.
<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 obter detalhes, você pode ver este aplicativo .