说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

问个关于关个spring事务的简单问题

编辑:说三道四文库 发布时间:2017-10-21 09:18
HTML文档下载 WORD文档下载 PDF文档下载

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

<!--txProxyTemplate--> 
   <bean id="txProxyTemplate" abstract="true"   class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager">
            <ref bean="transactionManager"/>
        </property>
        
        <property name="transactionAttributes">
            <props>
                <prop key="save*">PROPAGATION_REQUIRED</prop>
                <prop key="del*">PROPAGATION_REQUIRED</prop>
                <prop key="change*">PROPAGATION_REQUIRED</prop> 
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property> 
 </bean>
<bean id="menuDAO" class="kohisa.cn.dao.impl.MenuDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="menuService" class="kohisa.cn.service.impl.MenuService">
<property name="menuDAO">
<ref bean="menuDAO"/>
</property>
</bean>
      <bean id="menuServiceProxy" parent="txProxyTemplate" >
        <property name="target">
            <ref bean="menuService"/>
        </property>
    </bean>
<bean id="menuAction" class="kohisa.cn.action.MenuAction">
<property name="menuServiceProxy">
<ref bean="menuServiceProxy"/>
</property>
</bean>

这么配置对劲不,这个事务是什么玩应啊,是不是就是用不自己去commit?
getHibernateTemplate和SPRING的事务有关系没啊?
配置声明式事务,在代码里就不用管事务了(代码简洁了点)
getHibernateTemplate跟spring事务没关系,只不过HibernateTemplate又对session做了封装
不再用手动关闭session,也不再用从SessionFactory中拿session
还有:比如你在以一个UserManager里面需要保存一个user,可能你之前的做法是先得到session,然后session.save(user);
又有一个需求,在保存user的时候顺便记录下user的操作,在UserManager代码里面可能还要假如下面:
LogManager logManager = new LogManager();
Log log = new Log();
log.setType("DELETE");
log.setUser(user);
log.setDate(new Date());
logManager.save(log);
然而LogManager里的save方法也是需要session的,我们要求是user与log要同时保存成功或失败
但你根本没办法保证UserManager与LogManager里的session是同一个session(当然用SessionFactory的getCurrentSession()方法也是可以的),所以可能就出错了
用getHibernateTemplate就能保证session不会丢失,其实本质还是session.save(),可以看源代码去
说明一下:要是用SessionFactory的getCurrentSession()的话还要在hibernate.cfg.xml加上

<!--本地事务-->
<property name="hibernate.current_session_context_class">thread</property>
<!--JTA用下面这个,我不懂这个--->
<property name="hibernate.current_session_context_class">jta</property>

总之:我觉得getHibernateTemplate()经常是跟spring的声明式事务一起使用让人觉得它跟事务有关,其实就是为了让我们的一些操作简单化而已,
也就是simplifies Hibernate data access
我认识只能到这里了,希望有高人继续,呵呵
首先多謝樓上,講地很明白。
我剛才又去試了試,重新試了下,但是這個事務不回滾啊,要不就是我的測試方法有問題。
applicationContext.xml

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

  <bean id="transactionInterceptor"
        class="org.springframework.transaction.interceptor.TransactionInterceptor">
        <property name="transactionManager" ref="transactionManager" />
        <property name="transactionAttributes">
            <props>
                <prop key="save*">PROPAGATION_REQUIRED</prop>
                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>
    <bean
        class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
            <list>
                <value>userService</value>
            </list>
          </property>
        <property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value>
            </list>
        </property>
    </bean>

<bean id="userDAO" class="kohisa.cn.dao.impl.UserDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

<bean id="userService" class="kohisa.cn.service.impl.UserService" >
<property name="userDAO">
<ref bean="userDAO"/>
</property>
</bean>
<bean id="myDwr" class="kohisa.cn.dwr.MyDwr">
<property name="userService">
<ref bean="userService"/>
</property>
</bean>






UserService類
public class UserService implements IUserService {
public UserService(){}
private IUserDAO userDAO;
public IUserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(IUserDAO userDAO) {
this.userDAO = userDAO;
}
public void save(Users users){
userDAO.save(users);
userDAO.save(null);我讓這地方傳個空出錯,然後上邊那條記錄好回滾。。不知道這樣對不。
}
}
UserDAO類
public class UserDAO extends HibernateDaoSupport implements IUserDAO {
public UserDAO(){}
public void save(Users user){
getHibernateTemplate().save(user);
}
}
main方法
public static void main(String args[]) throws UnsupportedEncodingException{
IUserService userService = (IUserService)ApplicationContextUtil.getApplicationContext().getBean("userService");
                Users users = new Users();
                users.setName("abc");
userService.save(users);
}

總是有一條記錄插了進去,不回滾啊。
不知道我上面的配置是不是有問題,還是測試方法有問題,請達人指點啊能測試回滾的方法。。
我靠,原來不回滾是我表的問題,改成innodb就好了..
会不会是别的save方法也启用事务了呢?我也学spring不久,不是很能看明白你的配置文件,因为现在应该用<aop:config>这种方式了
给你改了一下(搞不好spring2以后才可以用,如果你的版本太低就别往下看了)

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

<!-- 配置sessionFactory -->
<bean name="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>

<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>

<aop:config>
<aop:pointcut id="allServiceMethod"
expression="execution(* kohisa.cn.service.impl.UserService .*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="allServiceMethod" />
</aop:config>

        <bean id="userDAO" class="kohisa.cn.dao.impl.UserDAO">
            <property name="sessionFactory">
                <ref bean="sessionFactory"/>
            </property>
        </bean>
    
    <bean id="userService" class="kohisa.cn.service.impl.UserService" >
        <property name="userDAO">
            <ref bean="userDAO"/>
        </property>
    </bean>
    <bean id="myDwr" class="kohisa.cn.dwr.MyDwr">
        <property name="userService">
            <ref bean="userService"/>
        </property>
    </bean>
</beans>
Android NDK开发技巧一 Android数据库ContentProvider封装原理 Android Permission列表,ADT 0.9.9 bug Android Theme和Styles内部定义解析 Android平台下图表绘制相关方法 Activity类的runOnUiThread方法你用过吗 Android上鲜为人知的UI控件介绍和使用 获取Android手机上的图片和视频缩略图 Android JSON解析示例代码 Android ANR介绍与避免 Windows Phone 7 SDK完善度不如Android m3 Android中使用定时器TimerTask类介绍 控制Android LED灯颜色代码 Android应用Icon大小在不同分辨率下定义 Android控件美化Shape你会用吗? Android屏幕截图之View方法 Android开发者应该保持以下特质 Android Widget开发模板 Zipalign使用方法-SDK中的APK文件优化工具 Android蓝牙控制之2.X或以上 Android数组排序常见方法 使用OpenGL开发一个指南针 Android自绘GridView控件 Android平板开发注意事项 Android控件TextProgressBar进度条上显文字 Android内存管理-SoftReference的使用 反射在Android开发中的利弊 intent调用代码总结二 Android缩略图类源代码 Android多人项目开发指导 AsyncTask对比Thread加Handler 一个jsp页面里面是不是不能同时有两个scope分别为application和session的Bean??? 给个简单的例子好吗?treeView----------asp.net------VB 我的facade session bean中老是lookup 其他的EJBs 不成功? 这两句什么意思啊? 结识ASP高手,将来会有项目介绍!:) exchange server 2000 能装在xp上吗? 怎样使自己的程序被安装的时候安装上自己制作的字体?? 求助:帮小妹找份工作 有高手在吗?帮帮忙! 一个在ASP中很简单的问题 很想很想很想散分 预报天气如“叫床” 湖南性感女主持惹争议 Websnap中TEnduserSessionAdapter组件的TadapterField问题~~~~~~~~~~~~~~~~~~~~~~~~~~ 急!!帮我看段代码! 为何对话框程序加入RichEdit控件后不能运行? 想知道word.application的朋友请进: InstallShield Express Custom Editon for Delphi那里有下载? 请问vb.net和vc#能不能创建数组控件??? 请问vb.net和vc#能不能创建数组控件 请问一下,vc 写的 dll,使用postmessage给出一个消息到窗口,在 vb 中应该怎么样响应? 我想开发一个数据中间层但不知哪用.net ATL MFC 开发好,能给个建议吗? 寻求cs CD-key 文件名(很有些困惑!) 高手近来拿分,请教一个算法问题,共开三帖,每帖一百分。 在windows2000+delphi6+ado+access2000做的程序可以在windows98中用吗? 我想学门语言,现在哪种最有前途啊 一个免费的电影网站,不需要手机不需要花钱就能看电影 数据库存储一些记录后不能写入,数据库文件异样(BDE) 急问:这样的文件怎样导入数据库? 一个免费的电影网站,不需要手机不需要花钱就能看电影 IIS下配置php-4.3.2-Win总是不行??? 很多书上都有说jsp:useBean的scope属性的application,是指任何使用相同的application,这个相同是什么意思? 关于统计的问题 马甲识别诸法之我论(转贴) 弱弱地问一个问题。 如何用键盘弹钢琴? ASL是什么? how to 高考 装了win2003之后调试asp.net还要不要再装其它软件? 学c++出路 我把数据库的连接池作到Bean中,麻烦就此产生,请高手帮我解决??? 成熟OA系统,B/S模式,三十几个模块,四十几个功能,超底价出售原代码,包你满意,有意者留个油箱,我把部分文档给你发过去,如果你离南 怎样装微软官方论坛? 成熟OA系统,B/S模式,三十几个模块,四十几个功能,超底价出售原代码,包你满意,有意者留个油箱,我把部分文档给你发过去,如果你离南 win2000安装后,每个一秒种读一次盘,请帮我解决问题。谢谢! 谁还来个高程QQ群? 大家都上过哪些收费电影下载网站? 请问那里有好的中文输入法下载。我的是redhat72 在线等待----100分,急!!! 光标定位问题 形容恐龙充满神秘感的成语 蒂姆波顿都有什么作品? class发什么音 英文最牛的骂人怎么骂? Cross Me Off Your List 什么意思,CROSS什么意思略过 有 删除 的意思? 对了 表示对钩 那个 是check 叉号,是不是就是 cross 我的音乐课3点结束 my music class --------- ----------- ----------横线怎么填?顺便问下,a与one有什么区别? 感恩的心手语舞完后要加什么 15,16互质吗 Japanes中的a发什么音,class,apple,that也同样如此 感恩的心手语舞谁有给我? 有没有国外名人犯错之后促进成就的例子各个方面的都可以~ 五下语文补充习题第1课春光染绿我们双脚最后一题的第2小题 21个人怎么排列感恩的心手语舞.我们都会啊!就是不会排位子。21个人排位怎么排啊。求个犀利点的位子! 有的飞机有四个引擎,有的飞机只有两个引擎,我的问题是四个引擎的飞机假如坏了一个引擎还有三个引擎应该还可以继续飞,但要是只要两个引擎的飞机坏了一个引擎那可能就要坠机了,那为了 给幼儿讲故事时要注意什么? It is a glass.(复数句)可以写在纸上发过来也可以,直接发过来. 大家有谁知道关于恐龙的成语有哪些啊? 以“成功不是永不犯错,而是永不犯相同的错”为主题的演讲,有什么名人事例啊? 闻王昌龄左迁龙标遥有此寄的写作目的 感恩的一首小诗.单位晚会感恩的心手语舞的前缀 已知函数f(x)=2的x方则函数f(1-x)的大致图像是 1.已知a、b均为正实数,a+b=1,求证 ax^2+by^2>=(ax+by)^22.已知三角形ABC三边a,b,c,且m为正实数,求证:a b c-------- + ------- > -------a+m b+m c+m上面a,b,c分别对应分母 6人感恩的心手语舞,应如何排队?队形要求有意义,最好2种, 甲班有240本书,乙班有260本书,捐出相同的本数.剩下甲是乙的80%,两班共捐几本书? eve高安pos制造t2 物品怎么样 比空间站快? 蒂姆用英语怎么写呀? 请问磨砺的近义词 如果a=4cm,b=9cm,则线段a,b的比例中项是什么? 都说蒂姆伯顿是鬼才,那形容他的这个“鬼才”英语怎么说的 用“视”组词 和 写句子.用视组词:( )视 组10个春节的时候,在热闹的爆竹声中,送走了旧的一年.春风吹来了,非常温暖.人们喝着美酒沉浸在欢乐中.由此,我们想到宋朝王安石的两句诗:— 已知线段a=4cm,c=9cm,求线段a和c得比例中项b 蒂姆波顿的电影大鱼是英式英语还是美式英语英式英语是全部都没有儿音的吗 还是说伦敦腔不一样 这个电影我听是英式可是它有儿音啊 还有我看爱尔兰的口音和英式差很多啊 是这样么 它 幼师面试时应该如何介绍自己 已知线段a=4cm,b=9cm.则a,b的比例中项c=多少, 高中生物2学法生物必修2 为什么现在的我这么浮躁过了年 又开始了这无聊的工作 我现在什么也不想干 特浮躁 心里很乱啊 真的想换个工作环境 可不知道还能去哪 真的挺烦的 已知线段a=4cm,b=9cm,求a,b的比例中项. 高中生物必修二,好难要怎么学?学到孟德尔实验和减数分裂,感觉减数分裂还罢了,主要数不清楚染色体啊,染色单体,姐妹染色单体,等等还有我想不起来了,这些的个数.但是孟德尔实验就死翘翘 不屑一顾是什么意思? 想做却不敢做的事作文 谁看过Tim Burton的骷髅新娘(CorpseBride)?演职员表的最后有一句In menory of Joe Ranft.谁知道是怎么回事?Joe Ranft是谁?为什么纪念他? 初二地理求解,第8、9题该怎么做?求详细解答 (a+b)的函数图像是1/4圆吗 仿写句子:成功是自私的,它绝不会将辉煌施舍给懒汉 不屑一顾的意思请回答 写同学作文 同桌做什么事都很慢 可以取什么题目 VFP中modify和create有什么区别 叮嘱的近义词是什么 我做什么事都比人家慢好多,怎么改?领导批评我了,我要改. VFP中browse field和list off有什么不同 It___boring.A:sound B:sounds C:watch D:watches 已知y=ax平方+bx+c当x=1时y有最大值为5 且它的图像经过(2,3)求这个函数的关系式(要过程) 苹果是梨的3/5苹果比梨少百分之几呢,梨比苹果多百分之几 关于形容词作定语the design for the room was of the fancy style popular in those days.这里popular in thouse days是形容词短语做定语吗?为什么polular前面不用家be动词?形容词前可以不加的吗? 前面一个绣花针,后面一个恐龙,猜一成语 我想:等爸爸妈妈老啦,我一定要好好()他们.(填立组的词)我想:等爸爸妈妈老啦,我一定要好好()他们。(填养组的词)打错了! 2012江苏省姜堰市的初中地理,生物会考成绩怎么查询? 关于白鹅小草杏花恐龙沙漠桂花圆明园桂林成语 在____的影响下 可以选填雷锋、妈妈、书、电脑等词语 然后写一篇文章要600字左右! 近义词、叮咛——……?、依旧——……? 安倍拟借索契冬奥会开幕会晤普京磋商领美国白宫称不会停止要求俄罗斯移交斯诺韩婚姻报告显示晚婚成潮流 姐姐新娘现日本前首相博客曝出核能阴谋论 被批可外媒称土为导弹采购留后手 以防与中国民调称奥朗德成为法国史上最不受欢迎总美宾州大学将向该校性侵案受害人赔59看到蛇会害怕?研究称恐惧有助灵长类避普京称索契冬奥会欢迎同性恋者参与 不科学家称半数早产因细菌感染 正研究简老奶奶订错机票搭错机 格拉纳达差一字澳大选后首个民意调查显示阿博特支持率“飓风级”大风暴袭击致英国南部22万英媒:美无人机袭击确立危险先例 不符美政府飓风桑迪周年前夕拨50亿美元重老奶奶订错机票搭错机 格拉纳达差一字公司注册资本\"零门槛\" 创业不再武汉“死亡公路”10年夺206命待整香港人口老龄化日益严重 是否输入外劳河北安新超生女婴被乡政府强行抱走 1今年股民幸福指数翻番 仅三成感到“不品牌价值突破300亿京珠北南北行将交通管制普君路明年5月改造完 将拓宽为双向六蒸汽锅鱼汤底 火锅界“小清新”网友:手填表格车管所不认 交警:个别疑子非亲生 刀捅怀孕前女友出版社:需专业书评人慧眼识珠限购后 南海卖地哪家强?朱荣斌:行业通才拓展碧桂园版图进口、合资迈步大扩张佛山首届网络DJ大赛启动全国首票报关单在莞办结自制海绵笔 挥毫天地间307路车挤不上 上班族常迟到市直机关职工迎新书画展征稿合生创展 带动社会力量参与慈善11岁男童家中窗台吊亡国宴级敦煌美食房东没签“治安合同” 租客换不到居住B+C娱乐+经济5万件宣传物品、5万张海报 文明活动
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘