Spring事务管理器

时间:2010-03-23 15:46:17

标签: spring aop transactions

我在spring框架上运行了一个j2ee应用程序。我正在用AOP实现一个事务管理器。它工作正常 当我的方法发生异常时,我的AOP配置会检测到异常并回滚数据库中的更改。但问题是您希望错误不应该被try-catch包围的代码。当我用try-catch包围它时它不会回滚。但是我需要做一些事情,比如每当出现错误时都会记录,而我唯一能想到的就是把它放在catch块中。

public class RegisterGLogic implements BLogic
{

        public BLogicResult execute()
        {
               BLogicResult result = new BLogicResult();

              //do some  db operation

               return result;
        }
}

这是我的AOP交易配置

<bean id="TerasolunaDataSource"  class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="PrototypeDataSource" />
  </bean>
 <tx:advice id="transactionInterceptor" transaction-manager="transactionManager">
   <tx:attributes>
   <tx:method name="insert*" propagation="REQUIRED"
    rollback-for="java.lang.Exception" />
   <tx:method name="execute*" propagation="REQUIRED"
    rollback-for="java.lang.Exception" />
   <tx:method name="*" propagation="REQUIRED" read-only="true" />
  </tx:attributes>
 </tx:advice>
 <!-- AOPの設定 -->
 <aop:config>
  <aop:pointcut id="blogicBeans" expression="bean(*BLogic)" />
  <aop:pointcut id="serviceBeans" expression="bean(*Service)" />
  <aop:advisor pointcut-ref="blogicBeans" advice-ref="transactionInterceptor" />
  <aop:advisor pointcut-ref="serviceBeans" advice-ref="transactionInterceptor" />
 </aop:config>

2 个答案:

答案 0 :(得分:0)

您可以在记录后重新抛出异常。这将使Spring做回滚。

答案 1 :(得分:0)

首先,为什么不使用内置的事务管理器?它们肯定比你的更稳定。

其次,你可以重新抛出一个RuntimeException我猜,甚至让异常冒泡。