首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Transaction Manager

Spring Transaction Manager
EN

Stack Overflow用户
提问于 2010-03-23 23:46:17
回答 2查看 1.9K关注 0票数 0

我有一个运行在spring框架上的j2ee应用程序。我正在用AOP实现一个事务管理器。它工作得很好。

当我的方法中发生异常时,我的AOP配置会检测到它,并回滚DB中的更改。但问题是代码中您期望的错误不应该包含在try-catch中。当我用try-catch包围它时,它不会回滚。但我需要做一些事情,比如每当出现错误时记录日志,而我唯一能想到的地方就是将它放在catch块中。

代码语言:javascript
复制
public class RegisterGLogic implements BLogic
{

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

              //do some  db operation

               return result;
        }
}

下面是我的AOP事务配置

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-23 23:50:39

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

票数 0
EN

Stack Overflow用户

发布于 2010-03-23 23:53:34

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2501323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档