2013-07-12 89 views
1

我有一個應用程序在Tomcat 7上運行,使用Spring,Mybatis和Mybatis-spring。SqlSessionFactory必須使用SpringManagedTransactionFactory才能使用Spring事務同步

下面是數據庫和交易中的servlet-context.xml的設置:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDS" /> 
<!-- enable the configuration of transactional behavior based on annotations --> 
<tx:annotation-driven transaction-manager="transactionManager"/> 
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
     <property name="dataSource" ref="dataSource" /> 
</bean> 
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="mapperLocations" value="classpath*:maps/*.xml" /> 
     <property name="transactionFactory"> 
     <bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" /> 
     </property> 
</bean> 
<mybatis:scan base-package="com.domain.dao.mappers" /> 
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> 
<constructor-arg index="0" ref="sqlSessionFactory" /> 
</bean> 

當我運行使用SqlSession的方法,我得到的錯誤是:

org.springframework.dao.TransientDataAccessResourceException: SqlSessionFactory must be using a SpringManagedTransactionFactory in order to use Spring transaction synchronization 
    at org.mybatis.spring.SqlSessionUtils.getSqlSession(SqlSessionUtils.java:136) 

我做錯了什麼?

我的目標實際上只是使用此設置的交易。我認爲我不需要JTA。但是如果這很容易在Tomcat上設置,我願意對它進行調整。

回答

1

我自己解決了這個問題。真正簡單的解決方案。如果有人跑進了同樣的問題,所有我需要做的是去除從sqlSessionFactory豆如下:

<property name="transactionFactory"> 
     <bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" /> 
</property> 

我必須以某種方式輸入時想我需要它,但顯然這只是需要如果你是不使用CMT(容器管理事務)。

+0

這個答案救了我從不眠之夜,謝謝很多。 –

相關問題