2011-01-16 11 views
2

私はorg.springframework.jdbc.datasource.DataSourceTransactionManagerを使ってトランザクションを管理する単純なアプリケーションを持っています。 私の春の設定は以下の通りです:DataSourceTransactionManagerとアクティブなトランザクションのテスト

<tx:annotation-driven/> 
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 

私は@Transactionalとメソッドを注釈付きとTransactionSynchronizationManager.isActualTransactionActive()

をプリントアウトしかし入れてはfalseでいます。私は何を間違えたのですか?

編集:私はSpringJUnit4ClassRunner.classでそれをテストすると言って忘れてしまった。私はTransactionalTestExecutionListener.classを含んでいて、これはうまくいきません。今度はクラスを拡張してから働いたAbstractTransactionalJUnit4SpringContextTests

+0

をどのようにそのメソッドを呼び出すのですか? – axtavt

答えて

0

私はあなたのcfgファイルに以下を追加するのを忘れたと思います。アノテーションを使用している場合はこれが必要です。これを追加しましたか?ここで

<tx:annotation-driven/> 

は、名前空間が

xmlns:tx="http://www.springframework.org/schema/tx" 

xsi:schemaLocation="http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 
0

であるあなたは、あなたのテストクラスに必要なアノテーションを使用しましたか?

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:/spring-....xml") 
@TestExecutionListeners({TransactionalTestExecutionListener.class, DependencyInjectionTestExecutionListener.class}) 
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) 
@Transactional(readOnly = false) 
public class MyTest { 
... 
} 

最後の2つが本当に必要かどうかはわかりませんが、テストケースにアクティブなトランザクションが必要なので、それらを必要とします。最初の3つは、アノテーション付きBeanのトランザクションプロキシを取得するのに十分なはずです。

0

私は同じ問題を抱えていた、あなたの代わりにこれを使用する必要があります。

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 
関連する問題