2012-02-13 10 views
0

Webアプリケーションでは、すべて独自のDataSourceTransactionManager(すべて名前が異なる)を持つSpring 3.0.xを使用しているさまざまなコンポーネントを使用しています。それらはすべて、「メイン」webapp経由で、そのスプリング設定を含むコンテキストに含まれています。複数のTransactionManagerを持つSpring TransactionInterceptor

<tx:annotation-driven transaction-manager="transactionManager_componentName" /> 

そして、私はこのようになります注釈を追加するトランザクションである必要があり、それぞれの方法について介して、有効になって私は宣言型トランザクション管理を使用していますコンポーネントの春のconfigsのそれぞれにおいて

<import resource="classpath:spring-config-componentName.xml" /> 

@Transactional(propagation=Propagation.REQUIRES_NEW, value="transactionManager_componentName") 

私が持っている問題は、私は一つだけTransactionInterceptorはのTransactionManagersの一つではなく、への参照を持っているが作成されていることが分かったということですコンポーネントそのものの1つです。これを処理する方法はありますか? BeanとしてTransactionInterceptorを指定してから@Transactional注釈で参照するようにしますか?

各コンポーネントにTransactionProxyFactoryBeanを指定し、xml configを使用して宣言的なtransaciton管理を行う可能性があると思います。しかし、これは私が避けたいものです。

Springのドキュメント(10.5.6.2 Multiple Transaction Managers with @Transactional)に記載されている提案された方法は機能しません。

答えて

0

最後に私は問題が何であるかを知り、春の文書に記載されているように動作すると言わなければなりません。 あなたは春のコンテナに複数のTransactionManagerを使用していて、@Transactionを使用している場合は、このようなTransactionManagerをspecifiyingしている場合、それはない作業を行います。あなたが仕様を削除するにはISTをしなければならない

<tx:annotation-driven transaction-manager="transactionManager_componentName" /> 

すべてTransactionManagerのこのような構成を使用します。そして、ちょうどこのようにそれを指定

<!-- ========== ENABLE ANNOTATIONS ========== --> 

<tx:annotation-driven/> 

<!-- ========== TRANSACTION MANAGER ========== --> 

<bean id="transactionManager_component1" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource_component1" /> 
    <property name="nestedTransactionAllowed" value="true" /> 
    <qualifier value="component1"/> 
</bean> 

そして、あなたがトランザクション内で実行したいあなたのためのメソッドを:

@Transactional(value="component1") 
関連する問題