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

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

编辑:说三道四文库 发布时间:2017-02-24 12:42
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>
VB的OPEN对话框控件图示功能扩充 VB通用数据表格输出程序的设计 VB网格中输入数据 VB应用程序中打印条形码的两种方法 VB与Windows资源管理器互拷文件 VB中DOS文件名与长文件名的转换 VB中的Unicode 和 Ansi 格式 VB中如何实现文本查找功能 VB中自制文件搜索器 Windows 初始化文件的修改 -VB资料 Word 97与WPS97的完美结合 -VB资料 比较两个文件-VB资料 采用递归算法删除带有多级子目录的目录-VB资料 菜单项的动态装入 -VB资料 处理加了密码的MDB文件-VB资料 VB创建临时文件 从公共对话框控件中提取多个文件名称 -VB资料 从全路径名中提取文件名 -VB资料 打印MsChart之类的控件 -VB资料 谈谈在VB6.0中如何使用资源文件进行编程 动画图像分解在VB动画设计中的应用 多重文档界面设计方法-VB资料 恢复回收站中的文件 -VB资料 VB获得位图文件的信息 VB获得文本框中光标所在行的内容 VB获取程序工作路径的方法 VB获取文件或文件夹属性 基于VB的通用折行打印程序 基于VB和EXCEL的报表设计及打印 VB建立多级目录 -VB资料 VB建立快捷方式-VB资料 javabean+tomcat访问数据库,如何配置阿!大虾帮帮我吧!搞来稿去就不行! 我想在运行时把form里面的所有控件缩小一半(控件很多,不想一个一个设),该怎么办? c++builder6快出现了。散分!!!!!!!!!!!!!!!!!!! 如何在程序中插入 EXCEL表格 我是个菜鸟,我这个问题这么这么的简单,以经在CSDN上问了好多好多天,为什么就是没有人会帮我解决? 急,所以到谁圆问一下,.dwg的文件是什么格式,用什么打开,谢谢! 一段读串口的代码有问题,高手帮我看看 紧急求救!!!怎样用C++Builder在链接服务器中创建一个表呢?SOS 特惠虚拟主机:dtp.51.net! 想把一系统内存块拷贝到位于D3DPOOL_DEFAULT的Surface中,怎样做更快?谈谈你的经验吧 在msdn中我看了一下午关于枚举的可就是不明白他到底在什么情况或者处理什么情况的时候用? All-in-Wonder Radeon 是不是不支持 Real Producer???? 用ACCESS设计了一个报表,在VB中如何调用? 支持ASP、PHP高迅特价主机:(推荐)dtp.51.net 套接字问题再次提问 C#参考文档要的举手啊! 怎样做服务程序? (在系统后台运行) TComboBox的text能否设为只读? 站点属性中“应用程序保护”有三个选项,分别是---低,中,高。有什么区别吗?安全性有什么不同?为什么有的isapi程序必须设置成低才能正确执行啊? 怎样才能使Web页上的ACTIVEX控件自动下载注册? ADO 与 DATA MODUAL 怎样判断一个文本文件中的数据。 绝对的诚意邀请高手加盟 请问邮件服务器,如何用java实现,最好有源代码,谢谢了,急 急贴:>>>>>>>>>>>>>>>>>>>>>>>>>>这里有英语好的网络专家吗? 关于java中的画矩形 哪里有将股票数据转换成数据库格式的工具? 从哪里能找到用opengl绘制三维图形的源码?基于unix下的。 asp 怎么判断客户端的操作系统还有屏幕大小什么的? 卡在了一个错误里出不来,求救! 谁知道??????求救~~~~用asp操作注册表,从注册表中删除指定的主键! 何处能找到用opengl绘制三维图形的源码?基于unix下的 谁有多种字符窜转换的方法或代码呀? 用JBuilder5做的数据库应用程序怎么打包? 我的机器上没有装outlook,当我点击mailto时,就直接链接到hotmail的邮箱,怎么回事那 请问我在一个窗体里拖动了十几个ADODC控件,启动时很慢请问我该怎么样 怎样调整图片适应"picturebox"大小 请问那位大哥有求切线的C程序。 关于赵薇着装的讨论可以停止了 怎样远程连接安装在Linux 上的Mysql数据库? 谁能帮我解压缩从huizen.dds.nl/~roalt/h263.html下载的 H263软件 真诚的希望你加入振兴软件产业的 事业中来 两个函数之间变量可以共享吗 拷贝ACCESS 库 请教高手(关于数据结构)的一个问题 关于Rundll32.exe程序的问题 播放AVI动画的问题 c#和asp.net有什么关系? 串口打不开怎么办? 请问各位大虾,怎样在java里打开一个IE窗口。 网络问题! 特征X射线产生的机理是什么? x射线荧光光谱仪有辐射吗 铝丝是什么东西?铝丝和不锈钢又有什么区别呢? 不锈钢酸洗后为何表面发黑 广东省长城304不锈钢矩形管比重、价格各多少? 用肉眼怎么区别铝和不锈钢最好能立刻就看出来 不锈钢酸洗后出现黑色怎么回事 浓硝酸能使活泼金属(如铝铁锌镁)发生钝化.为什么是错的?还有…用浓盐酸如何鉴别浓硫酸和稀硫酸. 太空铝和不锈钢,有什么区别,价格一样吗. 简述特征X射线产生的机理? 浓硝酸和铝反应的化学方程式.除了钝化之外还有么?生成什么? 304不锈钢螺丝做过钝化处理后,户外盐雾测试能达多长时间 求各种材料的比重,如铜,不锈钢 不锈钢钝化工艺 不锈钢(SUS302/303/304)螺丝或螺栓,清洗后生锈问题怎么解决?用什么钝化液呢? 铜,铁,不锈钢的比重是多少 不锈钢的比重是多少? 304不锈钢螺丝做钝化后盐雾可以达到多少小时? 什么就201半铜不锈钢装饰管,201与201#不锈钢有什么不同? 不锈钢抛光处理和钝化处理区别,请高手解答并请告抛光处理和钝化处理的基本工艺流程 X射线荧光光谱仪测试时对样品是否有要求测试样品是否需要为单一相或均质什么的.假设我的样品里面有高分子部分和无机物部分相互交错规律排列,测试结果是否会有影响?若样品里面有晶体 不锈钢钢管的酸洗配方硝酸,氢氟酸的配方比例,及各自作用? 为什么奥氏体不锈钢要求进行酸洗、钝化处理 X射线荧光光谱仪 检测标准作为生产用设备,到计量院去检测时,计量院采用什么标准?或者说有哪个标准明确规定了该仪器的检测周期? 为什么可擦中性笔可擦?原理是什么? 酸洗是否会造成材料腐蚀 不锈钢钝化处理 爱好摩易擦怎么用? 不锈钢管为什么要酸洗 410不锈钢加硬是否可以钝化处理 爱好摩易擦笔写的字真的在六十摄氏度字消失,零下十摄氏度字显现? 不锈钢用什么酸洗没腐蚀 什么是X射线荧光光谱仪? 可擦荧光笔的原理为什么可擦荧光笔能把颜色擦下去?有谁知道原理是什么? X射线的特征谱是由于什么原因产生的? X射线荧光光谱仪价格用于测试塑料、线材铜丝等,主要检测元素有Br、Pb、As、Cd、Hg、Cl、Cr等ROHS有害物质.固定道的,国产的就行了,越便宜越好,性价比越高越好! 保温杯有多种内胆,紫砂内胆,不锈钢内胆,还有的是玻璃内胆,陶瓷内胆哪种内胆保温时效更长.分别是多少哦 不锈钢管是否需要酸洗? 怎么辨认铁 铝 铜 不锈钢 保温杯内胆用进口不锈钢材料装菜会产生化学反应吗? x射线如何产生 铁,钢,不锈钢如何区分?碰水不生锈的是那种? 用内胆是不锈钢的保温杯泡茶好不好? 430不锈钢密度是多少,430不锈钢板是按理论重量收费的吗?我在“祺元金属”买了几吨430不锈钢2B板,给我算理重时说430不锈钢密度值是7.75g/cm3, 如何区分自行车是铁的还是不锈钢的 wt粗糙度参数符号是什么意思? 酸洗与钝化只是针对不锈钢材质吗 马氏体416不锈钢材料钝化后会生锈吗?盐雾试验应该在多少小时不生锈啊? 便携式x射线探伤机的使用 不锈钢酸洗与钝化有何不同 不锈钢焊斑净与钝化膏处理过后效果一样吗? 不锈钢酸洗钝化膏制作方法是否需要一些处理工艺?是搅拌还是离心或者还是其他什么工艺? 不锈钢酸洗钝化? 不锈钢316材质的钝化用硌酐调成钝化液钝化可以吗?烟盐雾试验可以做多长. 不锈钢酸洗钝化液是什么酸 X射线荧光光谱仪的原理是什么? 肉眼如何鉴别铝与不锈钢 不锈钢酸洗钝化液哪家比较有效啊 X射线荧光光谱仪分析原理? 怎样区别铝条和不锈钢请将所依据的性质说明
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn