- 浏览: 269390 次
- 性别:
- 来自: 新乡
文章分类
- 全部博客 (227)
- servciemix (10)
- db (18)
- javaTools (4)
- hibernate (31)
- web (3)
- spring (14)
- design pattern (4)
- java security (3)
- portal (1)
- ejb (6)
- session (2)
- java_lang (21)
- jbpm (29)
- struts (7)
- orgRights (2)
- project manager Jira (7)
- 跨库事务 (2)
- mysql (14)
- ubuntu (7)
- osgi (9)
- maven ant make (4)
- 分布式 高并发 高性能 (5)
- virgo-dm_server (0)
- osgi web (3)
- platform (1)
- smooks (1)
- business (1)
- 职场生涯 (14)
- Java编码格式 (2)
- web服务 (1)
- 计算机使用 (1)
- 健康工作生活的保障,工作中务必抛掉的不良心态 (4)
- 电信-网络监控 (1)
- 多线程-multithread (1)
- 海量数据-高性能 (2)
- Mybatis (1)
- web开发平台研发 (0)
- oracle (0)
- 应用服务器调优 (0)
- web前端 (0)
- servlet-jsp (0)
- tomcat (2)
- newtouch (1)
- portal_liferay (2)
- version control (1)
- apm-impact (2)
- tools (1)
- 研发管理 (1)
- 电商业务 (1)
- 生鲜电商市场调查 (0)
- PBX (0)
- 房东 (0)
最新评论
-
lifuchao:
...
权限问题 -
Branding:
谢谢,受教了,另外,CONN AS SYSDBA,必须是在操作 ...
Oracle密码忘记了怎么办? -
zhuchao_ko:
...
Portal实现原理 -
败类斯文:
不知道改哪里。。。木有见到红色。。表示悟性低了、、
jira error: Neither the JAVA_HOME nor the JRE_HOME environment variable is defin -
c__06:
正文:假如事务我是这样定义的: <tx:method n ...
Spring中Transactional配置
事务传播行为种类
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:
表1事务传播行为类型
事务传播行为类型
说明
PROPAGATION_REQUIRED
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
PROPAGATION_SUPPORTS
支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY
使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW
新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER
以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
当使用PROPAGATION_NESTED时,底层的数据源必须基于JDBC 3.0,并且实现者需要支持保存点事务机制。
<!--Hibernate事务管理器-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 定义事务拦截器bean-->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean需要依赖注入一个事务管理器-->
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="managerTemplate" abstract="true" lazy-init="true">
<property name="teamDao">
<ref bean="teamDao" />
</property>
<property name="studentDao">
<ref bean="studentDao" />
</property>
</bean>
<bean id ="manager" class="com.zd.service.impl.Manager" parent="managerTemplate" />
<!-- 定义BeanNameAutoProxyCreator-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>manager</value>
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<!-- 此处可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<!-- 基本数据库操作 -->
<bean id="baseDao" class="com.zd.service.impl.BaseDao">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate"/>
</property>
</bean>
<!-- 班级 -->
<bean id="teamDao" class="com.zd.service.impl.TeamDao">
<property name="baseDao">
<ref bean="baseDao" />
</property>
</bean>
<!-- 学生 -->
<bean id="studentDao" class="com.zd.service.impl.StudentDao">
<property name="baseDao">
<ref bean="baseDao" />
</property>
</bean>
public void testSaveTeam() {
Team team = new Team();
team.setTeamId(DBKeyCreator.getRandomKey(12));
team.setTeamName("Class CCC");
IManager manager = (IManager) SpringContextUtil.getContext().getBean("manager");
Student student = new Student();
student.setStudentId(DBKeyCreator.getRandomKey(13));
student.setSex(Student.SEX_FEMALE);
student.setStudentName("Tom");
student.setTeamId("60FHDXDIG5JQ");
manager.saveTeamAndStu(team, student);
System.out.println("Save Team and Student Success");
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:
表1事务传播行为类型
事务传播行为类型
说明
PROPAGATION_REQUIRED
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
PROPAGATION_SUPPORTS
支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY
使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW
新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER
以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
当使用PROPAGATION_NESTED时,底层的数据源必须基于JDBC 3.0,并且实现者需要支持保存点事务机制。
<!--Hibernate事务管理器-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 定义事务拦截器bean-->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean需要依赖注入一个事务管理器-->
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="managerTemplate" abstract="true" lazy-init="true">
<property name="teamDao">
<ref bean="teamDao" />
</property>
<property name="studentDao">
<ref bean="studentDao" />
</property>
</bean>
<bean id ="manager" class="com.zd.service.impl.Manager" parent="managerTemplate" />
<!-- 定义BeanNameAutoProxyCreator-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>manager</value>
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<!-- 此处可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<!-- 基本数据库操作 -->
<bean id="baseDao" class="com.zd.service.impl.BaseDao">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate"/>
</property>
</bean>
<!-- 班级 -->
<bean id="teamDao" class="com.zd.service.impl.TeamDao">
<property name="baseDao">
<ref bean="baseDao" />
</property>
</bean>
<!-- 学生 -->
<bean id="studentDao" class="com.zd.service.impl.StudentDao">
<property name="baseDao">
<ref bean="baseDao" />
</property>
</bean>
public void testSaveTeam() {
Team team = new Team();
team.setTeamId(DBKeyCreator.getRandomKey(12));
team.setTeamName("Class CCC");
IManager manager = (IManager) SpringContextUtil.getContext().getBean("manager");
Student student = new Student();
student.setStudentId(DBKeyCreator.getRandomKey(13));
student.setSex(Student.SEX_FEMALE);
student.setStudentName("Tom");
student.setTeamId("60FHDXDIG5JQ");
manager.saveTeamAndStu(team, student);
System.out.println("Save Team and Student Success");
发表评论
-
如何使用hibernate
2012-05-24 19:21 0一、选择Hibernate还是iBATIS都有它的道理: H ... -
关于hibernate自动建表和主键的数据类型的关系
2012-02-27 16:18 1142要想让hibernate自动建表, 1、除了 <prop ... -
用Spring+Hibernate链接时,在增删改时会报错: Write operations are not allowed in read-only mod
2011-09-11 19:53 881用Spring+Hibernate链接时,在增删改时会报错: ... -
[转]hibernate延迟加载
2011-04-26 11:41 5662007-12-01 [转]hibernate延迟 ... -
Hibernate利用XDoclet自动生成配置文件
2011-04-18 18:34 798Hibernate利用XDoclet自动生 ... -
如何利用 myeclipse 生成Hibernate 配置文件
2011-04-18 18:13 1246在hibernate中,每个数据表对应的其实是一个实体类,每个 ... -
Hibernate Synchronizer是一个Eclipse插件,可以自动生成*.hbm文件、持久化类和DAOs
2011-04-18 18:00 1893Hibernate Synchronizer是一个Eclips ... -
Hibernate auto produce
2011-04-18 17:52 981Hibernate 中需要class和mapp ... -
使用动态代理实现用AOP对数据库进行操作
2011-04-12 14:11 946使用动态代理实现用AOP对数据库进行操作 2008-03-14 ... -
Hibernate中cascade与inverse属性详解
2011-04-01 16:20 938Hibernate中cascade与inverse属性详解 ... -
事务和事务边界
2011-03-31 15:44 101310.1.2 事务和事务边界 http://book.51ct ... -
Hibernate saveOrUpdate分析
2011-03-31 15:30 860* Hibernate s ... -
使用Spring AOP代理方式实现声明式事务的原理
2011-03-31 15:28 1205使用Spring AOP代理方式实 ... -
Hibernate Session缓存概述
2011-03-31 15:27 1003* Hibernate Session缓存 ... -
解说Hibernate的工作原理实例
2011-03-31 15:26 871* 解说Hibernate的工作原理实例 ... -
简述Hibernate配置连接池
2011-03-31 15:25 842* 简述Hiber ... -
简单解析J2EE数据持久层设计
2011-03-31 15:24 979* 简单解 ... -
浅析Hibernate Callback接口
2011-03-31 15:23 892* 浅析Hibernate Callbac ... -
概述Hibernate equals()方法
2011-03-31 15:22 768* 概述Hiber ... -
概括潜在的Hibernate性能问题
2011-03-31 15:21 945* 概括潜在的Hibernate性能问题 ...
相关推荐
### Spring中的Transaction事务传播行为种类详解 #### 一、引言 在开发基于Spring框架的应用程序时,事务管理是确保数据一致性的重要手段之一。Spring框架提供了丰富的事务管理功能,其中包括了事务传播行为...
在Java应用开发中,特别是使用Spring框架时,开发者可以通过配置不同的事务传播行为来控制事务如何在方法调用之间传播。这些传播行为对于理解并正确实现业务逻辑至关重要。 #### 二、事务传播特性的种类 根据给定...
5. 事务传播行为配置错误。比如,在需要REQUIRES_NEW传播行为的情况下配置了REQUIRED。 为了确保事务管理的有效性,开发者应该理解并正确使用@Transactional注解,合理配置事务管理的相关参数,注意异常的处理,并...
例如,通过`transactionAttributes`属性设置不同的事务传播行为。 - **基于注解的配置**:使用`@Transactional`注解直接在业务方法上声明事务属性,如`PROPAGATION_REQUIRED`表示必须有事务,如果没有则新建。这种...
4. **事务的传播行为**:在编程式事务中,我们需要了解Spring定义的7种事务传播行为,例如PROPAGATION_REQUIRED(默认行为,如果当前存在事务,则加入到该事务;如果当前没有事务,则创建一个新的事务)、...
总的来说,分布式事务处理是分布式系统设计中的一大挑战,需要综合考虑异常处理、事务隔离级别、事务传播行为以及各种分布式事务协议。正确理解和应用这些知识,能帮助我们构建更健壮、一致性的分布式系统。
综上所述,事务处理是数据库管理中的核心机制之一,通过合理设置事务的隔离级别和传播行为,可以有效解决并发操作带来的数据不一致问题。同时,针对分布式系统的特殊需求,还需要采用适当的事务管理技术,如JTA和两...
它可以指定事务的传播行为、隔离级别、超时时间等。 7. tx+aop方式 tx+aop方式是Spring的事务管理方式之一,它使用AOP(面向aspect编程)来实现事务管理。这种方式可以将事务管理和业务逻辑分离,提高代码的可读性...
- 设备分类:涵盖文件输入及处理设备、输出设备、传输设备、整理设备以及网络设备等,如计算机、打印机、扫描仪、网络设备等。 - 设备标签:所有设备应贴有固定资产标识,记录设备信息,并建立详细的设备使用状况...
首先,办公设备管理涵盖了各种设备的分类、标签制度以及申购、维修与保管流程。设备被分为四类:文件输入及处理设备、文件输出设备、网络设备和其他设备。每个类别包括常见的办公设备,如计算机、打印机、网络设备等...
事务文书简报是一种在技术领域中也广泛应用的书面载体,主要用于汇报工作、交流信息和指导工作,具有简短、灵活的特点。简报的名称多种多样,如“XX简报”、“XX反映”、“XX动态”等,是内部沟通的重要工具。 简报...
7. **事业单位改革**:事业单位的行政级别逐步取消,具体事务由事业单位自身负责,这旨在推动事业单位自主管理,提高服务效率,减少行政干预。 这些知识点涉及事业单位管理、法律体系、文学知识、公共安全管理以及...
【知识点】 1. 四年级垃圾分类教学:这个教学...通过这样的垃圾分类教学设计,四年级的学生不仅可以学习到理论知识,还能通过实践项目深入理解和体验垃圾处理的复杂性和环保的紧迫性,从而形成良好的环保行为习惯。
12. 公关活动分类:不同学者根据公关行为特性将其分为新闻代理、广告代理、公共信息和双向平衡等多种模式。 13. 艾维·李与公关历史:艾维·李是公共关系行业的先驱,创立了世界上第一家公关顾问事务所,强调真实的...
- 事务传播行为:事务传播特性在多层系统中的应用。 6. **面向对象设计**: - 面向对象原则:单一职责原则、开闭原则等基本原则。 - 设计模式选择:根据实际需求选择合适的设计模式。 通过以上知识点的学习与...
- 包括但不限于复制权、出租权、展览权、表演权、放映权、广播权、信息网络传播权、摄制权、改编权、翻译权、出版权、发表权、汇编权等所有现行著作权法规定的权利种类。 - 乙方需尊重甲方的作品署名权和保护作品...
- 宣传:传播特定观念以影响思想和引导行动的社会行为。 - 受众:大众传播媒介信息的接受者,主要包括报纸读者、广播听众和电视观众。 - 新闻体制:涉及媒介机构的归属、传播目的、管理方式和经营方式,核心是...
- 事务传播行为(Transaction Propagation)。 - 事务的隔离级别(Isolation Level)。 - 事务的回滚和补偿机制。 - **关键知识点:** - 事务的ACID属性。 - EJB中的事务管理类型(容器管理和Bean管理)。 - 事务...
18. **违法行为分类**:一般违法行为指未达到犯罪程度的违法行为,如行为一;犯罪行为是指严重危害社会,触犯刑法的行为,如行为二。 19. **犯罪的基本特征**:犯罪的基本特征包括严重的社会危害性、刑事违法性和应...