以前是每个业务逻辑方法开启一个事务,但是现在要加入一个操作日志记录。且此操作信息保存在数据库当中。
这就要保证一致性了。请问各位如何在前置通知里面开启一个事务,然后在后置通知里面提交事务。
我也想过用环绕通知。但不知道怎么写。
请各位帮助。
谢谢<!-- 事务管理 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 事务拦截器 -->
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="Insert*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="Update*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="Delete*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
<!-- 方法切入点 -->
<bean id="methodPointcut" class="org.springframework.aop.support.NameMatchMethodPointcut">
<property name="mappedNames">
<list>
<value>add*</value>
<value>delete*</value>
<value>amend*</value>
<value>Insert*</value>
<value>Update*</value>
<value>Delete*</value>
<value>save*</value>
</list>
</property>
</bean>
<!-- 操作记录通知,后置 -->
<bean id="userOprinfoBeforeInterceptor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="pointcut" ref="methodPointcut"/>
<property name="advice" ref="userOprinfoBeforeAdvice"/>
</bean>
<!-- 操作记录通知,前置 -->
<bean id="userOprinfoAfterInterceptor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="pointcut" ref="methodPointcut"/>
<property name="advice" ref="userOprinfoAfterAdvice"/>
</bean>
<!-- 自动拦截代理 -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list><value>*Biz</value></list>
</property>
<property name="interceptorNames">
<list>
<value>userOprinfoBeforeInterceptor</value>
<value>transactionInterceptor</value>
<value>userOprinfoAfterInterceptor</value>
</list>
</property>
</bean>
这就要保证一致性了。请问各位如何在前置通知里面开启一个事务,然后在后置通知里面提交事务。
我也想过用环绕通知。但不知道怎么写。
请各位帮助。
谢谢<!-- 事务管理 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 事务拦截器 -->
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="Insert*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="Update*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="Delete*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
<!-- 方法切入点 -->
<bean id="methodPointcut" class="org.springframework.aop.support.NameMatchMethodPointcut">
<property name="mappedNames">
<list>
<value>add*</value>
<value>delete*</value>
<value>amend*</value>
<value>Insert*</value>
<value>Update*</value>
<value>Delete*</value>
<value>save*</value>
</list>
</property>
</bean>
<!-- 操作记录通知,后置 -->
<bean id="userOprinfoBeforeInterceptor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="pointcut" ref="methodPointcut"/>
<property name="advice" ref="userOprinfoBeforeAdvice"/>
</bean>
<!-- 操作记录通知,前置 -->
<bean id="userOprinfoAfterInterceptor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="pointcut" ref="methodPointcut"/>
<property name="advice" ref="userOprinfoAfterAdvice"/>
</bean>
<!-- 自动拦截代理 -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list><value>*Biz</value></list>
</property>
<property name="interceptorNames">
<list>
<value>userOprinfoBeforeInterceptor</value>
<value>transactionInterceptor</value>
<value>userOprinfoAfterInterceptor</value>
</list>
</property>
</bean>
解决方案 »
- 有哪位用过恩信ERP系统(或买过恩信ERP系统的)
- Struts2与FCKEditor的整合之在编辑框中插入图片
- ejb
- 求tomcat连接apache,通过jk连接的具体配置
- 都EJB3。0了,还看深入浅出EJB那样的讲2。0的书还有用嘛?
- 500分 求一龙族注册码!!!!!!!!!!!!!!!!
- 从Tomcat5.5.12到5.5.15原来的项目出现问题,请高手们帮忙?
- jsp 分模块开发,团队开发
- 在hibernate查询语句参数中如果有中文,就有错误
- mybatis generator
- 求JSP 毕业设计通用整理文档(像java语言介绍、优点,css,javascript等等)
- ext的一个小问题
另外:我觉得记录操作日志的操作不应该和业务方法放在同一个事务中,因为无论业务方法是否执行成功,日志都应该要记录。具体你可以配置日志的事务传播属性为 NESTED
改成这样
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<value>userOprinfoBeforeInterceptor</value>
<value>userOprinfoAfterInterceptor</value>
</list>
谢谢大家
spring编程式事务请参见 :
http://blog.csdn.net/trwhoya/archive/2009/09/10/4539366.aspx