论坛首页 Java企业应用论坛

配置spring 的事务控制,没有实现回滚,怎么回事?求指教

浏览 16025 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-02-25   最后修改:2013-02-26
现在放上我自己测试玩玩的工程:访问Action路径为:
http://localhost:8080/ALAN/helloWorldaa.action。数据库配置自己修改下在src目录下的jdbc.properties文件中。数据库操作语句在,login.action.dao.config.hello.xml中。
工程在附件中,忘各位能帮我看看

以下spring 配置部分内容:
        <!-- 事务管理配置 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource">
			<ref local="dataSource" />
		</property>
	</bean>
	
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="insert*" propagation="REQUIRED"/>
			<tx:method name="delete*" propagation="REQUIRED"/> 
                        <tx:method name="save*" propagation="REQUIRED"/> 
                        <tx:method name="update*" propagation="REQUIRED"/> 
		</tx:attributes>
	</tx:advice>
	
	<aop:config >
		 <aop:pointcut id="allManagerMethod" 
                               expression="execution(* login.dao.impl.HelloDaoImpl.*(..))" /> 
                 <aop:advisor pointcut-ref="allManagerMethod" 
                               advice-ref="txAdvice" />
	</aop:config>


DAO实现类目录为login.dao.impl.HelloDaoImpl.java.
具体代码如下:
package login.dao.impl;

import java.util.List;

import login.dao.HelloDao;
import CommUtil.dao.BaseDao;


public class HelloDaoImpl extends BaseDao implements HelloDao{

	public List<?> getHello() {
		// TODO Auto-generated method stub
		return super.queryforlist("getHello", null);
	}

	public void inserttest() {
		// TODO Auto-generated method stub
		try{
			super.getSqlMapClient().insert("insertdd",null); //这个方法sql书写时正确的会向表中增加数据。
			super.getSqlMapClient().insert("insertaa",null); //这个方法我人为造了个错误,会抛出异常进入catch。
		}catch(Exception e ){
			e.printStackTrace();
		}
	}
	
}


问题来了。我按照这个配置运行了。为什么无法回滚,返回第一个insert新增进去的数据呢?
求指点。
   发表时间:2013-02-26  
在配置上加上-Exception
<prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
0 请登录后投票
   发表时间:2013-02-26  
你的这个DAO纳入到spring的context中了吗?
0 请登录后投票
   发表时间:2013-02-26  
dwangel 写道
你的这个DAO纳入到spring的context中了吗?

额。不知道你说的DAO纳入SPRING的context我不知道是什么意思啊?
HelloDaoImpl 我在spring中配置过的,可以调用ibatis的sql的。可以正确执行。
0 请登录后投票
   发表时间:2013-02-26  
在你的第二个Insert发生的异常被你吃了,应当将它抛出,spring默认事务回话的异常只针对RuntimeException和其子异常吧,试试看。
0 请登录后投票
   发表时间:2013-02-26  
zrz_1989 写道
在你的第二个Insert发生的异常被你吃了,应当将它抛出,spring默认事务回话的异常只针对RuntimeException和其子异常吧,试试看。

正解!你自己把异常捕获了,spring怎么知道调用回滚呢?应该记录异常并继续向外抛
0 请登录后投票
   发表时间:2013-02-26  
zrz_1989 写道
在你的第二个Insert发生的异常被你吃了,应当将它抛出,spring默认事务回话的异常只针对RuntimeException和其子异常吧,试试看。


方法后跟上
throws SQLException
,没有效果。还是没有回滚
0 请登录后投票
   发表时间:2013-02-26  
scriptguy 写道
zrz_1989 写道
在你的第二个Insert发生的异常被你吃了,应当将它抛出,spring默认事务回话的异常只针对RuntimeException和其子异常吧,试试看。

正解!你自己把异常捕获了,spring怎么知道调用回滚呢?应该记录异常并继续向外抛


方法后跟上
throws SQLException
,没有效果。还是没有回滚
0 请登录后投票
   发表时间:2013-02-26  
oezx 写道
dwangel 写道
你的这个DAO纳入到spring的context中了吗?

额。不知道你说的DAO纳入SPRING的context我不知道是什么意思啊?
HelloDaoImpl 我在spring中配置过的,可以调用ibatis的sql的。可以正确执行。

就是说这个dao是不是和aop的advice在同一个applicationContext里存在
0 请登录后投票
   发表时间:2013-02-26  
dwangel 写道
oezx 写道
dwangel 写道
你的这个DAO纳入到spring的context中了吗?

额。不知道你说的DAO纳入SPRING的context我不知道是什么意思啊?
HelloDaoImpl 我在spring中配置过的,可以调用ibatis的sql的。可以正确执行。

就是说这个dao是不是和aop的advice在同一个applicationContext里存在


是在同一个spring配置文件中存在。
我已经把源码放在贴子的附件里了。这个问题还没有解决。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics