注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Java >> 开源技术 >> Spring >> Java正文

Spring配置事务在DAO层和业务逻辑层

文章来源:中国IT实验室收集整理 作者:佚名 更新时间:2008-6-28 20:35:44 【 】 【加入收藏
Spring通过AOP实现声明式事务管理。通常通过TransactionProxyFactoryBean设置Spring事务代理。我们需要一个目标对象包装在事务代理中。这个目标对象一般是一个普通Java对象的bean。当我们定义TransactionProxyFactoryBean时,必须提供一个相关的 PlatformTransactionManager的引用和事务属性。 事务属性含有上面描述的事务定义。
    PlatformTransactionManager:
    HibernateTransactionManager需要一个SessionFactory的引用
    JtaTransactionManager
    一.把事务放置在了DAO层:
     <!—hibernateTransactionManager-->
<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
        <ref local="sessionFactory" />
    </property>
</bean>
<!—DAO层接口实现-->
<bean id="companyDAOTarget"
    class="com.vstsoft.querycompany.dao.impl.CompanyDAOImpl">
    <property name="sessionFactory">
        <ref local="sessionFactory" />
    </property>
</bean>
<!—spring对DAO层的事务代理-->
<bean id="companyDAOProxy"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
        <ref bean="transactionManager" />
    </property>
    <property name="target">
        <ref local="companyDAOTarget" />
    </property>
    <property name="transactionAttributes">
        <props>
        <prop key="insert*">PROPAGATION_REQUIRED</prop>
        <prop key="delete*">PROPAGATION_REQUIRED</prop>
        <prop key="find*">
        PROPAGATION_REQUIRED,readOnly
        </prop>
        </props>
    </property>
</bean>
<!—业务层接口实现,把DAO注入到Service里面-->
<bean name="companyManageTarget"
    class="com.vstsoft.querycompany.service.impl.CompanyManageTarget">
    <property name="companyDAO">
        <ref bean="companyDAOProxy" />
    </property>
</bean>
<!—spring对Service层的代理-->
<bean id="companyManageProxy"
    class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="proxyInterfaces">
        <value>com.vstsoft.querycompany.service.CompanyManage</value>
    </property>
    <property name="target">
        <ref bean="companyManageTarget" />
    </property>
</bean>
<!—配置struts访问,把service层注入到action里面-->
<bean name="/company"
    class="com.vstsoft.querycompany.web.action.CompanyAction" singleton="false">
    <property name="companyManage">
        <ref local="companyManageProxy" />
    </property>
</bean>
二.把事务放置在了Service层:
<!—jtaTransactionManager-->
<bean id="jtaTransactionManager"
    class="org.springframework.transaction.jta.JtaTransactionManager" />
<!—DAO层接口实现-->
<bean id="companyDAOTarget"
    class="com.vstsoft.querycompany.dao.impl.CompanyDAOImpl">
    <property name="sessionFactory">
        <ref local="sessionFactory" />
    </property>
</bean>
<!—spring对DAO层的代理-->
<bean id="companyDAOProxy"
    class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="proxyInterfaces">
        <value>com.vstsoft.querycompany.dao.CompanyDAO</value>
    </property>
    <property name="target">
        <ref bean="companyDAOTarget" />
    </property>
</bean>
<!—业务层接口实现,把DAO注入到Service里面-->
<bean name="companyManageTarget"
    class="com.vstsoft.querycompany.service.impl.CompanyManageTarget">
    <property name="companyDAO">
        <ref bean="companyDAOProxy" />
    </property>
</bean>
<!—spring代理业务层的事务管理-->
<bean id="companyManageProxy"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
        <ref local="jtaTransactionManager" />
    </property>
    <property name="transactionAttributes">
        <props>
              <prop key="set*">PROPAGATION_REQUIRED</prop>
              <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
        </props>
    </property>
    <property name="target">
        <ref bean="companyManageTarget" />
    </property>
</bean>
<!—配置struts访问,把service层注入到action里面-->
<bean name="/company"
    class="com.vstsoft.querycompany.web.action.CompanyAction" singleton="false">
    <property name="companyManage">
        <ref local="companyManageProxy" />
    </property>
</bean>
  在service层的接口实现CompanyManageImpl里面有个setData方法:按顺序执行数据查询,数据删除,数据插入数据库行为,如果哪一步出异常(运行时异常),事务回滚,只有所有行为都没成功,事务提交。
  • 上一篇Java:

  • 下一篇Java:
  • 最 新 热 门
     手机开发平台指南、教程和资料介绍
     关于什么叫面向接口编程
     编写高级JavaScript应用代码
     不要验证,直接转化科学计数法
     Eclipse插件开发中实现刷新和重编译介绍
     Java开源技术:Eclipse的使用技巧详解
     配置eclipse 3.2 使用JDK1.5中文JavaAPI
     集成Windows本地应用到Eclipse RCP 程序中
     hibernate.cfg.xml配置文件的说明
     eclipse开发jface时,main.class解决方法
    最 新 推 荐
     ibatis+spring 集成
     结合Spring2.0和ActiveMQ进行异步消息调用
     servlet中如何访问spring容器
     Spring MVC与struts比较
     Spring security 命名空间的使用
     spring AOP面向切面编程
     关于String对象解析
     关于Spring切点函数@args()
     Spring中事务的传播属性详解
     Spring+Ibatis+事务处理
    相 关 文 章

    编写高级JavaScript应用代码
    ibatis+spring 集成
    结合Spring2.0和ActiveMQ进行异步消息调用
    servlet中如何访问spring容器
    Spring MVC与struts比较
    Spring security 命名空间的使用
    spring AOP面向切面编程
    关于String对象解析
    关于Spring切点函数@args()
    Spring中事务的传播属性详解

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用