由于以前没有深入接触到spring,对spring的事物支持不了解,以前自己参与的一些系统中,出现过在业务逻辑层一个小步出错,但是前面的步骤已经持久化,不能回滚。只能通过定时器读取日志,发现出错就删除这条记录。在最近较为深入的了解spring,发现spring对事物的支持能解决这一问题。
一、如果多个数据源(使用spring的jta事物管理策略)
org.springframework.transaction.jta.JtaTransactionManager代理了J2EE容器的JTA子系统,提供了跨越多个资源的分布式事物管理能力,这种事物管理策略必须运行在J2EE应用服务器环境中,spring只不过是提供一种集成到J2EE容器的事务管理器,并不执行具体的事物管理。
对于跨越多个Hibernate SessionFactory事物资源的分布式系统,只需简单吧JtaTransactionManager同多个LocalSessionFactoryBean定义结合起来作为一个事务策略,如果所有JDBC dataSource都支持事务的容器,那么只要一个业务对象使用了JTA策略,其他的业务对象会自动参与当前的JTA事务
xml配置
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:cn/com/test/jdbc/dataSource1</value>
</property>
</bean>
<bean id="dataSource2"class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:cn/com/test/jdbc/dataSource2</value>
</property>
</bean>
<bean id="SessionFactory1"class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource">
<value>dataSource</value>
</property>
...//省略
</bean>
<bean id="SessionFactory2"class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource">
<value>dataSource2</value>
</property>
...//省略
</bean>
.....//省略配置dao的bean
<bean id="myTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
<bean id="myService" class="test.testService.impl.TestServiceImpl">
<property name="transactionManager">
<value>myTransactionManager</value>
</property>
..//注入Dao
</bean>
二、一个数据源
当只有一个数据源时(大多数情况下,只有一个数据源),可以使用org.springframework.orm.hibernate3.HibernateTransactionManager.这种事务不依赖J2EE容器,仅仅需要org.hibernate.SessionFactory对象的一个实例。
xml配置文件
<bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactonManager">
<property name="sessionFactory">
<value>sessionFactory</value>
</property>
</bean>
以前我们的事务都是使用DB的事务来处理的,但是如果我们打开一个事务,并把一系列过程处理完再关闭事务,那么我们Dao层的代码会耦合业务层的代码,再我了解到jta和spring之前,对这样的问题,解决不了,现在再了解到这样的技术后,以后都能解决。
我们在工作中会遇到很多很多的问题,可能受限于我们当时的知识储备和经验不能解决,但是在整个java社区中可能其他人也遇到这样的问题,他们已经做出了成熟的解决方案。我们不能停下学习的脚步。
今日记一事,明日明一理,积久而成学。
分享到:
相关推荐
spring整合hibernate实现事务处理 1.spring整合hibernate实现事务处理-注解方式 2.spring整合hibernate实现事务处理-XML方式
spring与hibernate的整合 spring事务的配置
在准备整合Spring之前,也在网上看了各种配置。但是楼主心里还是很纠结,为啥一定要配置事务。配事务就陪事务为啥要配拦截,配拦截就配拦截为啥要配自动代理。都是因为楼主是java菜鸟。不然这些肯定是java方面的常识...
Spring整合hibernate(2)之基于HibernateTemplate的整合,jar需要自己添加!
Spring4整合Hibernate4实现用户购买图书和结账等操作,整合主要实现用IoC容器来管理Hibernate的SessionFactory实例,并使Hibernate使用Spring所提供的声明式事务……
ssh三大框架的整合步骤,非常详细。包含spring整合struts、spring整合hibernate、声明式事务说明等。
Struts2 Spring3 Hibernate3.3框架整合,增删改查,包含有数据库建表语句,包含有JAR包,包含有源代码。包含有事务的配置以及运用。使用的是Oracle的序列来提供的主键自增,建表和建立序列的sql语句,已经放在工程...
部门人员一对多的CRUD操作 hibernate: 管理实体关系映射 spring:数据源配置与获得... IOC依赖注入 和 AOP 事务管理 jsf : backing bean的操作 jsf 标签应用 jsf 信息国际化以资源绑定 jsf 表单验证 jsf 导航设定
spring mvc hibernate整合,采用MyEclipse自动生成包和配置文件,jar包可能有多余,但是不影响整体效果。服务器tomcat。数据库mysql。
实现了添加用户功能并实现了列表功能,services方法也实现了事务功能, 此压缩文件中包括了一部分jar文件, 另外的jar文件在struts2_hibernate_spring整合(二)中
struts hibernate spring 实用整合 spring的配置文件(applicationContext.xml)中,配置了事务和一个日志功能的AOP的结合,是非常具有实用价值的针对初学者的入门实例。
spring、struts、hibernate+mybatis 整合在在一起
通过这个资料包,用户可以深入了解和学习如何在Web应用程序中实现一个图书管理系统,掌握如何将Struts、Hibernate和Spring框架整合在一起,实现分层架构、MVC设计模式以及ORM映射等关键技术。Struts作为一款优秀的...
springboot(4) 整合mybatis和hibernate 请删除项目中本地仓库的配置,或者改成国内的公共仓库,否则将无法启动
spring整合hibernate 1、用spring IOC容器管理hibernate的sessionFactory;2、hibernate使用spring的声明式事务管理;
Spring如何整合Hibernate和struts --cglib来实现事务管理.rtf.rtf
12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java ...
详细示范了当前java里面流行的三大框架的整合,对于spring的配置文件applicationContext.xml做了详细的注释说明,里面包含数据库连接池、Hibernate里的SessionFactory、事务等重点模块的配置。在实际开发过程中多数...
Spring4.0、Struts2.3.15、Hibernate4.2.4、jQuery1.9.1涉及到了诸多开发时的细节:ModelDriven、Preparable 拦截器、编写自定义的类型转换器、Struts2 处理 Ajax、OpenSessionInViewFilter、迫切左外连接、Spring ...
Spring框架在整个系统中起到了粘合剂的作用,它将Struts和Hibernate框架整合在一起,实现了依赖注入和事务管理等功能。通过Spring的配置,开发人员可以方便地对各个组件进行管理和控制,提高了系统的