2011-01-16 3 views
2

Ich habe eine einfache App, die org.springframework.jdbc.datasource.DataSourceTransactionManager verwenden, um die Transaktionen zu verwalten. Meine Feder Config ist wie folgt:DataSourceTransactionManager und Test für aktive Transaktion

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

ich kommentierten haben die Methode mit @Transactional und drucken Sie das TransactionSynchronizationManager.isActualTransactionActive()

Aber das löschte ist false. Was habe ich falsch gemacht ?

Edit: Ich habe vergessen zu sagen, dass ich das mit SpringJUnit4ClassRunner.class testen. Ich habe die TransactionalTestExecutionListener.class und das wird nicht funktionieren. Jetzt hat es funktioniert, nachdem ich die Klasse mit AbstractTransactionalJUnit4SpringContextTests

+0

Wie nennt man diese Methode? – axtavt

Antwort

0

erweitern Ich glaube, Sie haben vergessen, das Folgende zu Ihrer cfg-Datei hinzuzufügen. Dies ist erforderlich, wenn Sie Anmerkungen verwenden. Hast du das hinzugefügt?

<tx:annotation-driven/> 

Hier ist der Namespace

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

Haben Sie die gewünschten Anmerkungen auf Ihrer Testklasse verwenden?

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

Ich bin nicht sicher, ob die letzten beiden wirklich notwendig sind, möchte ich meine Testfälle eine aktive Transaktion haben, das ist, warum ich diese benötigen. Die ersten drei sollten ausreichen, um transaktionale Proxies für Ihre kommentierten Beans zu erhalten.

0

ich hatte das gleiche Problem, sollten Sie diese stattdessen verwenden:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 
Verwandte Themen