2011-08-25 4 views
4

Je possède deux sources de données pour oracle et autre pour postgresql et les deux sont utilisées dans la même méthode métier. Comment je peux faire ce printemps à l'aide de la méthode transactionnelle bussiness @transactionSpring transaction multiple datasource

méthode d'affaires

@Transactional 
public int getData(){ 

oracleDao.func1(); 
postgreDao.func2(); 
} 

Dans config j'ai

<bean id="transactionManagerPostGres" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"/> 
     </bean> 
    <bean id="transactionManagerOracle" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactoryOracle"/> 
</bean>  

Répondre

0

Voulez-vous dire un two-phase commit? C'est un problème difficile et dépend des bases de données et des pilotes que vous utilisez.

+0

Je veux définir la méthode commerciale comme transaction soit validation complète ou annulation. –

5

Vous aurez besoin de la prise en charge d'un conteneur JavaEE approprié pour cela, un conteneur prenant en charge les transactions en deux phases et les transactions XA. Les pilotes Oracle et Postgres JDBC prennent tous deux en charge les transactions XA, c'est donc OK.

Le conteneur l'expose à Spring via l'API JTA, et Spring l'utilise en utilisant JtaTransactionManager. Votre application ne doit pas changer, elle le traite comme une transaction normale.

La façon dont vous allez configurer ce système dépend entièrement de votre conteneur JavaEE, chacun a sa propre façon de le faire.

+0

Je vais déployer l'application sur servicemix. –

+0

@prabha: Dans ce cas, vous devez vous plonger dans les documents ServiceMix et savoir si XA JTA est pris en charge. Si ce n'est pas le cas, vous devez trouver un autre contenant, ou trouver quelque chose qui s'intègre à ce que vous avez. C'est une question spécifique à ce conteneur et indépendante de Spring. – skaffman

+0

Puis-je créer une annotation @transaction pour utiliser un autre gestionnaire de transactions dans la même méthode? –

Questions connexes