Chinaunix首页 | 论坛 | 博客
  • 博客访问: 715056
  • 博文数量: 147
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1725
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-22 10:36
文章分类

全部博文(147)

文章存档

2011年(1)

2010年(1)

2009年(35)

2008年(110)

我的朋友

分类: Java

2008-12-01 21:43:22

Spring提供的事务管理:
Spring提供的事务管理可以分为两类:编程式的和声明式的
编程式的,比较灵活,但是代码量大,存在重复的代码比较多;
声明式的比编程式的更灵活方便。
 
在这里编程试的事务管理就省略了
 
声明的事务管理使用:
1.配置数据源,hibernate,事务管理器:

 

<!-- 配置数据源 -->
    <bean id="dataSource"
        class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName">
            <value>org.gjt.mm.mysql.Driver</value>
        </property>
        <property name="url">
            <value>jdbc:mysql://localhost:3306/demo?useUnicode=true&amp;characterEncoding=utf-8</value>
        </property>
        <property name="username">
            <value>root</value>
        </property>
        <property name="password">
            <value></value>
        </property>
    </bean>


    <!-- 配置Hibernate -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref local="dataSource" />
        </property>
        <property name="mappingResources">
            <list>
                <value>com/demo/hibernate/beans/User.hbm.xml</value>
                <value>com/demo/hibernate/beans/Address.hbm.xml</value>
                <value>com/demo/hibernate/beans/Schedule.hbm.xml</value>
                <value>com/demo/hibernate/beans/Worklog.hbm.xml</value>
                <value>com/demo/hibernate/beans/Sms.hbm.xml</value>
                <value>com/demo/hibernate/beans/Notice.hbm.xml</value>
                <value>com/demo/hibernate/beans/Meeting.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQLDialect
                </prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>


    <!-- 配置事务管理器 -->
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref local="sessionFactory" />
        </property>
    </bean>

定义DAO

<!-- 定义DAO -->
    <bean id="userDAO" class="com.demo.hibernate.dao.UserDAO">
        <property name="sessionFactory">
            <ref local="sessionFactory" />
        </property>
    </bean>

定义DAO代理:

<!-- 定义DAO代理 -->
    <bean id="UserDAOProxy"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager">
            <ref bean="transactionManager" />
        </property>
        <property name="target">
            <ref local="userDAO" />
        </property>
        <property name="transactionAttributes">
            <props>
                <prop key="insert*">PROPAGATION_REQUIRED</prop>
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property>
    </bean>

<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>

key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:
 PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
 PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
 PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
 PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
 PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
 PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
 PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

阅读(772) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~