SSI声明式事务不起作用,请高手帮忙看下

问题描述

用的SSI框架(Struts2.1.8+Spring2.5+Ibatis2.3.4)将事务的开启定义在了biz层,声明式事务中指定了哪些方法使用读写事务,如果biz中定义的方法与声明式事务中指定的方法名不一致,应该无法增删改的,但结果是仍然能增删改,请高手看看哪里出了问题声明式事务中定义的是save*,而biz里面方法名是insertEmp,以前SSH集成的时候这样写访问会报错数据也插入不进去,但换成SSI之后,就没这个效果了配置如下:Spring配置<beanid="propertiesConfig"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><propertyname="location"value="classpath:conn.properties"></property></bean><beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"><propertyname="driverClassName"value="${driver}"></property><propertyname="url"value="${url}"></property><propertyname="username"value="${user}"></property><propertyname="password"value="${pwd}"></property><propertyname="maxActive"value="10"></property><propertyname="maxIdle"value="5"></property><propertyname="maxWait"value="5000"></property></bean><beanid="sqlMapClient"class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"><propertyname="dataSource"ref="dataSource"></property><propertyname="configLocation"value="classpath:SqlMapConfig.xml"></property></bean><beanid="sqlMapTemplate"class="org.springframework.orm.ibatis.SqlMapClientTemplate"><propertyname="sqlMapClient"ref="sqlMapClient"></property></bean><beanid="transManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"></property></bean><tx:adviceid="advice"transaction-manager="transManager"><tx:attributes><tx:methodname="save*"propagation="REQUIRED"/><tx:methodname="update*"propagation="REQUIRED"/><tx:methodname="delete*"propagation="REQUIRED"/><tx:methodname="*"read-only="true"/></tx:attributes></tx:advice><aop:config><aop:pointcutid="point"expression="execution(*com.hr.biz.impl.*.*(..))"/><aop:advisoradvice-ref="advice"pointcut-ref="point"/></aop:config>

biz接口publicinterfaceEmpBiz{publicintinsertEmp(Empemp);}

biz实现类publicclassEmpBizImplimplementsEmpBiz{privateEmpDaoedao;publicvoidsetEdao(EmpDaoedao){this.edao=edao;}publicintinsertEmp(Empemp){returnthis.edao.insertEmp(emp);}}

dao接口publicinterfaceEmpDao{publicintinsertEmp(Empemp);}

dao实现类publicclassEmpDaoImplimplementsEmpDao{privateSqlMapClientTemplatetemplate;publicvoidsetTemplate(SqlMapClientTemplatetemplate){this.template=template;}publicintinsertEmp(Empemp){return(Integer)this.template.insert("insertEmp",emp);}}

注入配置:<beanid="empDao"class="com.hr.dao.impl.EmpDaoImpl"><propertyname="template"ref="sqlMapTemplate"></property></bean><beanid="empBiz"class="com.hr.biz.impl.EmpBizImpl"><propertyname="edao"ref="empDao"></property></bean>

解决方案

解决方案二:
mybatis会自动提交事务,如果要使用你配置的事务管理器还是把方法名改为save*
解决方案三:
建议你使用注解方式的事物管理把<aop:config>和<tx:advice>去掉加入<tx:annotation-driven/>然后把transManager改成transactionManager在需要加入事物管理的方法头上加上@Transactional
解决方案四:
引用1楼nd707355117的回复:

mybatis会自动提交事务,如果要使用你配置的事务管理器还是把方法名改为save*

谢谢,我想知道的是,如何在我原有的写法上改动,从而达到biz方法名和声明式事务中定义方法名不一致无法增删改
解决方案五:
引用2楼littlebrain4solving的回复:

建议你使用注解方式的事物管理把<aop:config>和<tx:advice>去掉加入<tx:annotation-driven/>然后把transManager改成transactionManager在需要加入事物管理的方法头上加上@Transactional

谢谢,我想知道的是,如何在我原有的写法上改动,从而达到biz方法名和声明式事务中定义方法名不一致无法增删改
解决方案六:
检查下你的事物的配置是否被正确纳入系统使用,换就换说,也就是说你的事物没有起作用,你可以检查下比如save方法中抛出异常,看是否事物有回滚,如若回滚则事物配置没问题,反之则你懂得
解决方案七:
楼主我在mybatis3.2spring3.1中测试了的,你这种方式要报错,错误是该事务read-only,不过没在你的版本下面测试
解决方案八:
切面是针对接口的不是实现类你的配置改改就好了execution(**..service.*Service.*(..))

时间: 2024-09-12 06:13:16

SSI声明式事务不起作用,请高手帮忙看下的相关文章

jvm-tomcat自动挂掉,在tomcat/bin/hs_err_pid4884.log如下,请高手帮忙看下。

问题描述 tomcat自动挂掉,在tomcat/bin/hs_err_pid4884.log如下,请高手帮忙看下. # A fatal error has been detected by the Java Runtime Environment: # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7c95a1db, pid=5424, tid=2752 # JRE version: 6.0_45-b06 Java VM: Java HotSpo

mysql创建触发器报错,请高手帮忙看下

问题描述 mysql创建触发器报错,请高手帮忙看下 DROP TABLE if EXISTS tb; CREATE TABLE tb(BH CHAR(16),content VARCHAR(20),date DATETIME,val INT); CREATE TRIGGER tri_NewBH BEFORE INSERT ON tb FOR EACH ROW BEGIN DECLARE dt CHAR(8) DECLARE bh_id CHAR(16) DECLARE number INT(1)

new-新手求教 请大家帮忙看下源码

问题描述 新手求教 请大家帮忙看下源码 ------------------------DAL------------------------------------------------------------public List select(int UserID) { //初始化数据库连接对象 DateAccessLaye dbmyfile = new DateAccessLaye(); //初始化myfilemodel对象的集合实例 DataTable dsmf = dbmyfile

android开发-recylerview添加head的问题,请各位帮忙看下咋解决

问题描述 recylerview添加head的问题,请各位帮忙看下咋解决 recylerview是纵向的,我在head中添加了一个横向滚动的recyclerview 当手指按在横向recyclerview下拉的时候纵向的recyclerview会向下跳动一段距离(不是正常滑动距离),怎么解决啊?开发-recylerview添加head的问题,请各位帮忙看下咋解决-recylerview"> 解决方案 VC++问题 帮忙解决哈C#程序集问题,请高手帮忙解决一下!!关于xslt的问题,请大家帮

php 排序 选择排序法-请各位帮忙看下这个选择排序法哪里错了?

问题描述 请各位帮忙看下这个选择排序法哪里错了? //选择排序法 function selectsort(&$arr){ $temp=0; for($i=0;$i<count($arr)-1;$i++){ // 假设$arr($i)为最小值 $minval=$arr[$i]; //记录最小数的下标 $minindex=$i; for($j=$i+1;$j<count($arr);$j++){ //如果minval不是最小,把最小值传给minval:最小值下标传给minindex: if

c++/cli-C++ 加载 CTP DLL 报 LNK2001 错误,请大家帮忙看下,这个问题已经困扰几天了

问题描述 C++ 加载 CTP DLL 报 LNK2001 错误,请大家帮忙看下,这个问题已经困扰几天了 有个问题困扰我几天了,群里的大牛帮忙看下. 我加载ctp的dll时,会报下面这个错误. 谁知道原因,或者之前遇到过吗? 解决方案 删除所有的obj,重新编译下,检查下你的lib目录,对应的lib是否齐全.如果程序是自己写的,那么检查下函数的定义和调用是否一致. 解决方案二: 你需要工程中添加ctp的lib库文件.这样link才找得到.

android应用-recylerview添加head的问题,请各位帮忙看下咋解决

问题描述 recylerview添加head的问题,请各位帮忙看下咋解决 recylerview是纵向的,我在head中添加了一个横向滚动的recyclerview 当手指按在横向recyclerview下拉的时候纵向的recyclerview会向下跳动一段距离(不是正常滑动距离),怎么解决啊? 解决方案 已解决,是headerView的问题 解决方案二: VC++问题 帮忙解决哈C#程序集问题,请高手帮忙解决一下!!关于xslt的问题,请大家帮忙看下,急啊! 解决方案三: http://bbs

spring配置声明式事务遇到的问题 望高手解决!

问题描述 我在用spring配置声明式事务时用<tx:advice>里面没有属性自己往里加时有错误配置文件如下:<?xmlversion="1.0"encoding="UTF-8"?><!---Middletierapplicationcontextdefinitionfortheimagedatabase.--><beansxmlns="http://www.springframework.org/schema/

遇见数据库查询非常棘手的问题。请大家帮忙看下。

问题描述 首先我先叙述下我的数据库,数据库每天都要录入新数据,每天要录入1000口井,包括井的各种参数.字段JH,RCQ,RCS,LJCS,LJCQ.(井号,日产气,日产水,累计产气,累计产水)现在要是:得到每个月的每口井的平均每天产气量,平均产水量(每天的量加起来算平均),累计产气量(每天录入的信息里都,取每个月每口井的最后一天数值).我的代码如下.sql="selectsum(RCS)asRCS2,sum(RCQ)asRCQ2,avg(GY)asGY1,avg(TY)asTY1,avg(DJ