问题描述
主要框架: Spring3.0 + ibatis2.3 + Hibernate3.2 + Struts2.2(struts2-spring-plugin-2.2.1.jar)大体代码如下:class TestAction extends ActionSupport { private AppSevice appService; //set/get 方法省略 public String commit() { //第一种方式, appService.commit(xxx); //第二种方式 appService = (AppService)AppContextFactory.getSpringContext().getBean("appService"); appService.commit(xxx); }}public class AppContextFactory {private static ClassPathXmlApplicationContext context = null;public static BeanFactory getSpringContext() {if (context == null) {context = new ClassPathXmlApplicationContext(new String[] { "applicationContext-test.xml" });}return (BeanFactory) context;}}补充说明appService.commit()中分为业务流程(使用hibernate)交易和业务功能交易(使用ibatis)问题来了,当使用第一种方式时一旦业务功能交易出错,业务功能交易可以完全回滚,业务流程交易无法回滚;当使用第二种方式时,可以实现业务流程业务功能交易的一致性,全部都回滚;希望各位高手给些意见,很想把这个问题搞清楚;
解决方案
applicationContext-test.xml这里边没有事物控制吧
解决方案二:
你这个类 应该继承 ApplicationContextAware,然后在spring里面随便定义一个bean
解决方案三:
private AppSevice appService; //set/get 方法省略 public String commit() { //第一种方式, appService.commit(xxx);使用AopUtils.isAopProxy(appService)验证下是否是代理对象,如果不是 检查配置文件哪个环节出错了。可参考下http://www.iteye.com/topic/1122740http://jinnianshilongnian.iteye.com/blog/1423971