2016-04-28 200 views
0

我的事务中的回滚无效(Spring 3.1)。我试图编辑我的配置xml文件,如here但没有结果。 这里我的XML文件:Spring @Transactional配置xml

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns="http://www.springframework.org/schema/beans" 
     xmlns:jee="http://www.springframework.org/schema/jee" 
     xmlns:aop= "http://www.springframework.org/schema/aop" 
     xmlns:tx= "http://www.springframework.org/schema/tx" 
     xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
     xsi:schemaLocation=" 
       http://www.springframework.org/schema/mvc 
       http://www.springframework.org/schema/mvc/spring-mvc.xsd 
       http://www.springframework.org/schema/jee 
       http://www.springframework.org/schema/jee/spring-jee-3.1.xsd 
       http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd 
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-2.0.xsd 
       http://www.springframework.org/schema/tx 
       http://www.springframework.org/schema/tx/spring-tx-2.0.xsd 
       http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 
       "> 

     <jee:jndi-lookup id="dataSourceUsrAppe1" jndi-name="jdbc/ZhabDS"/> 

     <bean id="utentiDAO" class="it.dao.UtentiDAO"> 
      <property name="dataSourceUsrAppe1"> 
       <ref bean="dataSourceUsrAppe1"/> 
      </property> 
     </bean> 
<!-- doesn't work with this: 
     <tx:annotation-driven transaction-manager="txManager"/> 
      <property name="dataSourceUsrAppe1"> 
       <ref bean="dataSourceUsrAppe1"/> 
      </property> 
     </bean> 
    </beans> 
--> 
</beans> 

我应该在这里增加一个事务管理器?

这里是我的服务:

@Service 
public class UtentiService { 
    @Autowired 
    private UtentiDAO utentiDAO; 

    @Transactional(rollbackFor={Exception.class}, propagation=Propagation.REQUIRED) 
    public boolean createUser(Zhabuten user) throws Exception 
    { 
      long idPrincipale; 
      idPrincipale = utentiDAO.insert(user, utentiDAO.query1); 
      idPrincipale = utentiDAO.insert(user, utentiDAO.query2); 

      if (idPrincipale!=0) throw new java.lang.Exception(); 

      idPrincipale = utentiDAO.insert(user, utentiDAO.query3); 
     return false; 
    } 
} 

异常被抛出正确的,它从控制器获取,并数据库没有rollbacked。 我是否缺少xml中的任何配置?

+1

您的交易管理器来自哪里? –

+0

你检查过日志吗?交易是否开始和提交? –

+0

我不明白如何配置它。我应该删除这个? <属性名= “dataSourceUsrAppe1”> Accollativo

回答

2

使用以下xml配置。

<!-- Enable Annotation based Declarative Transaction Management --> 
<tx:annotation-driven proxy-target-class="true" 
    transaction-manager="transactionManager" /> 

<!-- Creating TransactionManager Bean, since JDBC we are creating of type 
    DataSourceTransactionManager --> 
<bean id="transactionManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSourceUsrAppe1" /> 
</bean> 
+0

谢谢,这个作品! 奇怪的是,在这之后,我刚刚从eclipse中以调试模式得到了一个新奇怪的弹出错误(之后,我清理了所有旧的断点):无法安装断点it.service.UtentiService $$ ... CGLIB ... $$ someHEXnumber due缺少行编译器属性。修改编译器选项以生成行号属性。 原因:缺席行号信息。 – Accollativo