<!-- 配置切面 -->
<aop:config>
<aop:pointcut expression="execution(* com.xxx.lobs.manager.impl.*.*(..))"
id="myPoint" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="myPoint" />
</aop:config> <tx:advice id="txAdvice" transaction-manager="tm">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<!-- <tx:method name="updateBatch" propagation="REQUIRED"/> -->
<tx:method name="delete*" propagation="REQUIRED" />
<!-- <tx:method name="deleteBatch" propagation="REQUIRED"/> -->
<!--其他的方法,将只有只读事务 测试事务 -->
<tx:method name="*" propagation="NOT_SUPPORTED" read-only="true" />
</tx:attributes>
</tx:advice>

step1:类放在com.xxx.lobs.manager.impl下面,方法名字是update2,预期结果正常执行,结果正常

step2:将测试类放在这个包中com.xxx.lobs.manager.impl.test 预期结果,不能正常执行,结果报错不能获取事务(org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread)

step3:将测试类放在这个包中com.xxx.lobs.manager.impl.test 预期结果。修改配置文件为<aop:pointcut expression="execution(* com.xxx.lobs.manager.impl.*.*.*(..))"    预期结果可以正常执行,结果不能正常执行(

Could not obtain transaction-synchronized Session for current thread

step4:将测试类放在这个包中com.xxx.lobs.manager.impl.test 预期结果,修改配置文件为<aop:pointcut expression="execution(* com.xxx.lobs.manager.impl..*.*(..))" 预计结果不可以正常执行,结果正常执行了,

step5:将测试类放在这个包中com.xxx.lobs.manager.impl.test 预期结果,修改配置文件为<aop:pointcut expression="execution(* com.xxx.lobs.manager.impl..*.*(..))" ,在update时制造一个异常,预计结果不可以正常执行 结果不可以正常运行,说明这样方法可以指定模块。

step6:将测试类不放在这个包中com.xxx.lobs.manager.impl.test,和这个包同级 预期结果,修改配置文件为<aop:pointcut expression="execution(* com.xxx.lobs.manager.impl..*.*(..))" ,测试事事务是否存在,预计结果未知,正常

step7:将测试类不放在这个包中com.xxx.lobs.manager.impl.test,和这个包同级 预期结果,修改配置文件为<aop:pointcut expression="execution(* com.xxx.lobs.manager.impl..*.*(..))" ,制造异常判断事务是否存在。,预计报异常事务存在,结果事务存在

结论

配置切点时这样配置 <aop:pointcut expression="execution(* com.xxx.lobs.manager.impl..*.*(..))"

很多教程都少了个. 这样配置的好处是可以在impl中加一个模块的包把不同的类放在对应的模块的包里面,如果没有包也可以正常工作

step9:配置文件如下,测试myupdate2方法是否具有事务

<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<!--其他的方法,将只有只读事务 测试事务 -->
<tx:method name="*" propagation="NOT_SUPPORTED" read-only="true" />

复制udpate2的方法,没有异常数据的情况下,预计不具备事务,结果正常

step10. 在9的基础上制造异常,预计还可以更改一条数据,结果还可以更改一条数据,不具备事务。

结论,方法名字匹配配置文件中的配置才可以具备事务

测试ssh框架中hibernate的事务的更多相关文章

  1. SSH框架中hibernate 出现 user is not mapped 问题

    SSH框架中hibernate 出现 user is not mapped 问题      在做SSH框架整合时,在进行DAO操作时.这里就只调用了chekUser()方法.运行时报  user is ...

  2. 在SSH框架中使用Spring的好处(转)

    以下是我总结下今天笔试中SSh中的总结: 在SSH框架中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不 ...

  3. SSH框架中配置log4j的方法

    SSH框架中使用log4j的方便之处 1. 动态的改变记录级别和策略,即修改log4j.properties,不需要重启Web应用,这需要在web.xml中设置一下.2. 把log文件定在 /WEB- ...

  4. 在SSH框架中,如何得到POST请求的URL和参数列表

    在做项目的API通知接口的时候,发现在SSH框架中无法获取到对方服务器发来的异步通知信息.最后排查到的原因可能是struts2对HttpServletRequest进行了二次处理,那么该如何拿到pos ...

  5. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:测试SSH框架分层整合及验证事务是否有效

    测试框架分层的整合 HibernateTemplate 和 HibernateDaoSupport,这两个类是 Spring 为整合 Hibernate3 提供的两个工具类. HibernateTem ...

  6. SSH框架中spring的原理

    在ssh项目中,是有明确分工的,spring的作用就相当于将struts和hibernate连接起来,是将两个没有关系的框架的特性,方法,action都放在spring的配置文件中使他们建立关系.取他 ...

  7. 在SSH框架中使用Spring的好处

    在SSH框假中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句.Struts是用来 ...

  8. SSH框架之hibernate《四》

    hibernate第四天     一.JPA相关概念         1.1JPA概述             全称是:Java Persistence API.是sun公司推出的一套基于ORM的规范 ...

  9. SSH框架之hibernate《二》

    Hibernate第二天     一.hibernate的持久化类和对象标识符         1.1持久化类的编写规范             1.1.1什么是持久化类:               ...

随机推荐

  1. 【R笔记】使用R语言进行异常检测

    本文转载自cador<使用R语言进行异常检测> 本文结合R语言,展示了异常检测的案例,主要内容如下: (1)单变量的异常检测 (2)使用LOF(local outlier factor,局 ...

  2. SpringBoot定时任务(Spring Schedule )实现方法

    FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss"); fdf.format(new Dat ...

  3. inner join, left join ,right join 结果

    假设有两个表结构如下: 表table1 表 table 2 内连接: --内连接 select * from table1 inner join table2 on table1.ID = table ...

  4. iOS:iOS 的 APP 如何适应 iPhone 5s/6/6Plus 三种屏幕的尺寸?

    原文:http://www.niaogebiji.com/article-4379-1.html?utm_source=tuicool 初代iPhone 2007年,初代iPhone发布,屏幕的宽高是 ...

  5. http://blog.163.com/eugeneheen_chen@126/blog/static/120812157201291994916866/

    http://blog.163.com/eugeneheen_chen@126/blog/static/120812157201291994916866/

  6. Python测试Kafka集群(pykafka)

    生产者代码: # -* coding:utf8 *- from pykafka import KafkaClient host = 'IP:9092, IP:9092, IP:9092' client ...

  7. represent states with objects

    1. The behavior of objects in the real world is more complex than simply being in one state at a tim ...

  8. DevExpress 15.1.sln

    Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio VisualStudioVersion = 14 ...

  9. Python学习笔记(四)多进程的使用

    python中多进程与Linux 下的C基本相同.   fork的基本使用   先看最简单的例子: # coding: utf-8 import os def my_fork(): pid = os. ...

  10. C 实现strcmp,strcpy,strcat函数

    基于C语言的strcmp,strcpy,strcat函数的实现.C语言是一个程序猿的基础,一定要重视. char* strcat ( char * dst , const char * src ) { ...