`
zscomehuyue
  • 浏览: 411787 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring事务配置笔记(实现不同Service间调用事务)

阅读更多
项目 >> Web 框架 >> Spring MVC
Spring事务配置笔记(实现不同Service间调用事务)
推荐好文   评价   
出处:blog.csdn.net 作者:fbysss 更新时间:2007-11-30   
Loading...
网址:    OK
评价:很差   较差   一般   好   最好     OK
一、关键配置示例:
<bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref local="dataSource" />
        </property>
   
        <!-- bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/-->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref local="sessionFactory" />
        </property>
    </bean>

    <!-- Hibernate Transaction Interceptor Definition -->
    <bean id="hibernateTransactionInterceptor"
        class="org.springframework.transaction.interceptor.TransactionInterceptor"
        parent="transactionIntercetorTemplate">
        <property name="transactionManager">
            <bean id="hibernateTransactionManager"
                class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                <property name="sessionFactory">
                    <ref bean="sessionFactory" />
                </property>
            </bean>
        </property>
    </bean>

    <!-- Transction Intercetor's Template -->
    <bean id="transactionIntercetorTemplate" abstract="true">
        <property name="transactionAttributes">
            <props>
                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="check*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="insert*">PROPAGATION_REQUIRED</prop>
                <prop key="update*">PROPAGATION_REQUIRED</prop>
                <prop key="delete*">PROPAGATION_REQUIRED,-BussException</prop>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>

    <!-- 定义自动代理生成器-->
    <bean id="autoProxyCreator"
        class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="interceptorNames">
            <list>
                <idref bean="hibernateTransactionInterceptor" />
                <idref bean="jdbcTransactionInterceptor" />
            </list>
        </property>
        <property name="beanNames">
            <value>*Service</value>
            <!--list>
                <idref bean="bookService" />                                       
            </list-->[来源www.iocblog.net]
            <!--添加Service bean-->
        </property>
    </bean>
    <bean id="hibernateDaoTemplate" abstract="true">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
    </bean>
    <!-- Dao 定义 -->
    <bean id="imageDao" class="com.fbyssssite.dao.ImageDao"
        parent="hibernateDaoTemplate" />
    <bean id="imageFolderDao" class="com.fbyssssite.dao.ImageFolderDao"
        parent="hibernateDaoTemplate" />
    <!-- Service 定义 -->
    <bean id="imageService" class="com.fbyssssite.bo.ImageService" autowire="byName">
        <property name="dao" ref="imageDao"></property>
    </bean>   
    <bean id="imageFolderService" class="com.fbyssssite.bo.ImageFolderService" autowire="byName">
        <property name="dao" ref="imageFolderDao"></property>
    </bean>   

二、测试代码: 
public void delete(Object entity,IBaseUser user) throws BussException ...{
   super.delete(entity, user);
   ImageFolder folder = (ImageFolder)entity;
   String folderId = folder.getId();  
   IImageService imageService  = ServiceFactory.getImageService();
   imageService.deleteAllInFolder(folderId,user);  
  }
  public void deleteAllInFolder(String id,IBaseUser sysUser) throws BussException ...{
   log.info("删除图片夹'"+id+"'中的图片...");
   throw new BussException(1,"临时测试:测试事务是否生效的异常。测试完毕后删除此语句。",log);
   /**//*
   StringBuffer sql = new StringBuffer("delete ");
   sql.append("from ");
   sql.append(getEntityClassName());
   SqlBuilder sqlBuilder  = SqlBuilder.getInstance();
   sqlBuilder.appendWhereCondition(sql, "folderId='"+id+"'");
   bulkUpdate(sql.toString(), sysUser);
   */  
  }


三、测试效果:
抛出BussException之后,imageFolder实体并没有被删除,而是回滚了。
四、注意事项:
1.其中的 BussException是一个CheckedException(继承自Exception),这里不过是一个例子,如果其他方法需要同样的方式处理事务,也要加上-BussException,否则不能回滚;如果是一个 UnCheckedException,就不需要在这里配置,默认就会回滚。
2.如果采用MySQL,show table status可以查看表的ENGINE类型,MyISAM是不支持事务的,如果需要事务,应该改成InnoDB:alter table [tablename] engine = InnoDB;



作者:fbysss
msn:jameslastchina@hotmail.com
blog:blog.csdn.net/fbysss
声明:本文由fbysss原创,转载请注明出处
分享到:
评论

相关推荐

    spring hibernate 事务管理学习笔记(二)

    在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...

    spring hibernate 事务管理学习笔记(一)

    在实际开发中,理解这部分源码有助于我们更深入地掌握Spring事务管理的工作原理。 至于工具,开发者可以使用诸如IntelliJ IDEA这样的IDE,其中集成的调试工具可以帮助我们跟踪代码执行流程,查看事务状态的变化,...

    Spring学习笔记(16)----使用Spring配置文件实现AOP

    在本篇Spring学习笔记中,我们将深入探讨如何利用Spring配置文件来实现面向切面编程(AOP)。面向切面编程是Spring框架的核心特性之一,它允许我们把关注点分离,将横切关注点(如日志、事务管理、权限控制等)与...

    spring学习笔记(十六)-声明式事务的例子

    首先,声明式事务管理基于AOP(面向切面编程)实现,Spring通过代理模式在方法调用前后自动插入事务管理的代码。它主要通过两种方式实现:XML配置和注解驱动。 1. XML配置:在`&lt;tx:advice&gt;`元素中定义事务行为,...

    spring笔记

    Spring 笔记 Spring 是 Java 企业版(Java EE)应用程序的框架,提供了结构化的配置文件,实现了控制反转(IoC)和面向切面编程(AOP),支持表现层、业务逻辑层和持久层。Spring 的核心是 IoC 和 AOP,能够与主流...

    Spring学习笔记

    ### Spring学习笔记:深入理解AOP与Annotation驱动的动态代理 #### 核心知识点解析: 在探讨Spring框架中AOP(面向切面编程)及基于Annotation的动态代理之前,我们首先需要了解AOP的基本概念及其在Spring中的实现...

    struts+spring+hibernate整合配置笔记

    Struts、Spring和Hibernate是Java开发中非常流行的三大框架,它们各自在Web应用程序的不同层面上发挥作用,共同构建出高效、可维护的系统。Struts主要负责控制层,Spring提供了全面的依赖注入(DI)和面向切面编程...

    Spring学习笔记之九--声明式事务

    在提供的压缩包文件"spring_hibernate_2"中,可能包含了Spring与Hibernate集成的示例代码,例如配置文件、实体类、DAO接口和实现、Service类等。通过研究这些代码,你可以更直观地理解如何在实际项目中应用声明式...

    spring容器学习笔记

    初始化和销毁方法在 Spring 容器中,我们可以通过配置来指定 Bean 在被创建后或销毁前需要执行的方法。这些方法可以用于执行初始化设置或者清理工作。 3.1. 初始化方法当我们想要在 Bean 创建完成后执行特定的初始...

    spring学习笔记 私塾在线

    【Spring学习笔记 私塾在线】是一份综合性的学习资源,包含了从网上收集的各种Spring相关的教程和实战指导。这份笔记的目的是为学习者提供一个全面的Spring框架学习平台,通过集成多个主题,帮助用户深入理解和掌握...

    Spring学习笔记(15)----使用Spring的注解方式实现AOP

    在本篇Spring学习笔记中,我们将深入探讨如何利用Spring框架的注解方式来实现面向切面编程(AOP)。AOP是一种编程范式,它允许我们定义横切关注点,如日志、事务管理等,然后将这些关注点模块化并插入到应用程序的多...

    Spring框架笔记

    - **获取Bean实例**: 通过调用`getBean`方法来获取配置文件中定义的Bean实例。 #### 四、Spring注解配置 **4.1 基于注解的配置** - **注解**: 使用注解来配置Bean及其依赖关系,这种方式更加简洁。 - **常用注解*...

    Spring_AOP笔记Spring_AOP笔记

    在Spring AOP中,配置切面主要是在`applicationContext.xml`配置文件中完成,或者使用注解式配置。例如,我们可以定义一个切面类,然后在其中声明通知方法,并使用`@Before`、`@After`等注解来标记这些方法。同时,...

    Spring Boot 学习笔记完整教程.docx

    这个学习笔记的完整教程将涵盖多个关键领域,帮助开发者深入理解和使用 Spring Boot。 1. **Spring Boot 教程** - **基础入门**:了解 Spring Boot 的核心理念,包括自动配置、起步依赖和独立运行的特性。 - **...

    Spring AOP 使用笔记

    本笔记主要探讨了如何在Spring应用中使用AOP来实现横切关注点,如日志、事务管理、性能监控等。 首先,理解AOP的基本概念至关重要。AOP的核心是切面(Aspect),它封装了跨越多个对象的行为或责任。切面由两个主要...

    Spring学习笔记 包括SSH的整合

    此外,Spring还提供了大量其他功能,如数据访问、事务管理、邮件服务、远程调用等。Spring MVC是Spring框架的一部分,用于构建Web应用,它提供了模型-视图-控制器(MVC)架构模式,使得业务逻辑、视图和控制逻辑分离...

    学习Spring笔记_AOP_Annotation实现和XML实现

    这篇“学习Spring笔记_AOP_Annotation实现和XML实现”主要探讨了如何在Spring中利用注解和XML配置来实现AOP的概念。 AOP,全称Aspect-Oriented Programming,是一种编程范式,旨在将关注点分离,让开发者可以更专注...

    struts2.21 spring hibernate 整合笔记

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自在应用程序的不同层面发挥着重要作用。Struts2作为MVC(模型-视图-控制器)框架,负责处理请求和控制应用程序流程;Spring则是一个全面的后端框架,...

    SSH笔记-事务管理

    在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而这里的“SSH笔记-...通过学习这些资料,开发者可以更好地掌握Spring事务管理的使用,从而在实际项目中确保数据的完整性和一致性。

Global site tag (gtag.js) - Google Analytics