测试ssh框架中hibernate的事务
<!-- 配置切面 -->
<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的事务的更多相关文章
- SSH框架中hibernate 出现 user is not mapped 问题
SSH框架中hibernate 出现 user is not mapped 问题 在做SSH框架整合时,在进行DAO操作时.这里就只调用了chekUser()方法.运行时报 user is ...
- 在SSH框架中使用Spring的好处(转)
以下是我总结下今天笔试中SSh中的总结: 在SSH框架中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不 ...
- SSH框架中配置log4j的方法
SSH框架中使用log4j的方便之处 1. 动态的改变记录级别和策略,即修改log4j.properties,不需要重启Web应用,这需要在web.xml中设置一下.2. 把log文件定在 /WEB- ...
- 在SSH框架中,如何得到POST请求的URL和参数列表
在做项目的API通知接口的时候,发现在SSH框架中无法获取到对方服务器发来的异步通知信息.最后排查到的原因可能是struts2对HttpServletRequest进行了二次处理,那么该如何拿到pos ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:测试SSH框架分层整合及验证事务是否有效
测试框架分层的整合 HibernateTemplate 和 HibernateDaoSupport,这两个类是 Spring 为整合 Hibernate3 提供的两个工具类. HibernateTem ...
- SSH框架中spring的原理
在ssh项目中,是有明确分工的,spring的作用就相当于将struts和hibernate连接起来,是将两个没有关系的框架的特性,方法,action都放在spring的配置文件中使他们建立关系.取他 ...
- 在SSH框架中使用Spring的好处
在SSH框假中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句.Struts是用来 ...
- SSH框架之hibernate《四》
hibernate第四天 一.JPA相关概念 1.1JPA概述 全称是:Java Persistence API.是sun公司推出的一套基于ORM的规范 ...
- SSH框架之hibernate《二》
Hibernate第二天 一.hibernate的持久化类和对象标识符 1.1持久化类的编写规范 1.1.1什么是持久化类: ...
随机推荐
- 爬取维基百科人物介绍,并使用pymysql存储到数据库
代码如下: from urllib.request import urlopen from bs4 import BeautifulSoup import re import datetime imp ...
- ext js layout and tree
数据 <configuration> <configSections> <section name="hibernate-configuration&q ...
- OpenStack手动制作CentOS 7 KVM镜像
在前面讲解KVM的时候,我们已经学习了如何制作KVM镜像,那么制作OpenStack使用的镜像和KVM是有一些区别的. 1. 下载CentOS 7官方ISO安装镜像这里使用国内阿里云的镜像源进行 ...
- CSS中样式
CSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离.要想让CSS对网页内容有效果,必须将CSS代码引入网页,通常有四 ...
- 关于 iOS 证书,你必须了解的知识
收录待用,修改转载已取得腾讯云授权 最新腾讯云技术公开课直播,提问腾讯W3C代表,如何从小白成为技术专家?点击了解活动详情. 作者 |陈泽滨 编辑 | 顾乡 从事iOS开发几年,越来越发现,我们的开发 ...
- 解决防火墙限制远程连接MySQL(导致错误10060可能之一)
打开windows防火墙,打开高级设置 1. 入站规则设置 ① 选择入站规则,然后新建规则,选择端口,然后下一步 ② 选择TCP,选择特定端口,然后输入端口,如有多个端口需要用逗号隔开了 例如: 33 ...
- linux上MySQL改动password的各种方法,yc整理
MySQL改动password的各种方法 整理了下面四种在MySQL中改动rootpassword的方法,可能对大家有所帮助! 方法1: 用SET PASSWORD命令 mysql -uroot my ...
- CentOS下安装实时检測网络带宽的小工具bmon
首先下载rpmforge-release扩展的rpm包 32位操作系统:wget http://www.sudu.us/Tools/bmon/rpmforge-release-0.3.6-1.el5. ...
- valgrind的callgrind工具进行多线程性能分析
1.http://valgrind.org/downloads/old.html 2.yum install valgrind Valgrind的主要作者Julian Seward刚获得了今年的Goo ...
- Python——描述符(descriptor)解密
本文由 极客范 - 慕容老匹夫 翻译自 Chris Beaumont.欢迎加入极客翻译小组,同我们一道翻译与分享.转载请参见文章末尾处的要求. Python中包含了许多内建的语言特性,它们使得代码简洁 ...