关于spring的事务管理,百思不得其解,哪位高人给看下哪里出问题了
1.由于数据库设计要求全局主键都唯一,因此设计了一个存储过程用于生成之
(防止并发出问题,存储过程加了行锁),并且方法放在了dao层中,
要求该方法不论seivece层执行成功与否都要提交,(单独的事务管理)
/*
* in based dao
*/
public void getPrimaryKey() throws SomeException{
//执行生成主键存储过程
}
/*
* in services层
*/
pulic void addToDataBase() throws OtherExceptioin{
this.dao.getPrimaryKey();
//do others
}
sping配置文件
<!-- 配置Advice(事务的传播特性) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="getPrimaryKey" propagation="REQUIRES_NEW" />
<tx:method name="add*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice> <!-- 配置事务管理器应用的范围 -->
<aop:config>
<aop:pointcut id="affectMethods"
expression="execution(* com.sfzc.jlny.biz.impl.*.*(..))
OR execution(* com.sfzc.jlny.dao.impl.Bm23BaseDAO.getPrimaryKey(*))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="affectMethods" />
</aop:config>
现在的问题是 为什么将生成主键的方法的事务配置成REQUIRES_NEW后在 services层中 执行完
getPrimaryKey后 事务并没有提交,而是一旦service层抛出异常后两者一起回滚了,即单独的
REQUIRES_NEW事务管理没起作用。而我去掉getPrimaryKey的spring事务管理后,自己在getPrimaryKey
方法里 getSession.beginTransaction(),commit然后提交就一切正常。会是哪里出问题了呢?希望大家能给一些
指点,在此谢过了。
1.由于数据库设计要求全局主键都唯一,因此设计了一个存储过程用于生成之
(防止并发出问题,存储过程加了行锁),并且方法放在了dao层中,
要求该方法不论seivece层执行成功与否都要提交,(单独的事务管理)
/*
* in based dao
*/
public void getPrimaryKey() throws SomeException{
//执行生成主键存储过程
}
/*
* in services层
*/
pulic void addToDataBase() throws OtherExceptioin{
this.dao.getPrimaryKey();
//do others
}
sping配置文件
<!-- 配置Advice(事务的传播特性) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="getPrimaryKey" propagation="REQUIRES_NEW" />
<tx:method name="add*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice> <!-- 配置事务管理器应用的范围 -->
<aop:config>
<aop:pointcut id="affectMethods"
expression="execution(* com.sfzc.jlny.biz.impl.*.*(..))
OR execution(* com.sfzc.jlny.dao.impl.Bm23BaseDAO.getPrimaryKey(*))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="affectMethods" />
</aop:config>
现在的问题是 为什么将生成主键的方法的事务配置成REQUIRES_NEW后在 services层中 执行完
getPrimaryKey后 事务并没有提交,而是一旦service层抛出异常后两者一起回滚了,即单独的
REQUIRES_NEW事务管理没起作用。而我去掉getPrimaryKey的spring事务管理后,自己在getPrimaryKey
方法里 getSession.beginTransaction(),commit然后提交就一切正常。会是哪里出问题了呢?希望大家能给一些
指点,在此谢过了。
解决方案 »
- org.apache.jasper.JasperException: Template /template/ajax/text.ftl not found
- 刚刚搭个SSH2的框架,那个地方配置有问题,导致数据库连接全部用光。
- jbuilder开发ejb第一个程序出错
- 关于webservice中读取文件的路径
- 急急急~~使用struts框架,页面代码过长,导致无法显示出错,请问要怎样解决~
- 初学servlet遇到的小小问题,向大神求助!
- 一个关于jsp的简单问题,请大家帮下忙!
- struts标签问题,急,急,急,在线等
- java weblogic.ejbc 为什么报错"Error creating descriptor from jar file "
- 如何把weblogic7设置为开发模式
- StringBuffer 内存释放问题
- javamail linux下不能发送的问题
2、Aop配置有没有经过测试(拦截是否生效)?