接到一个项目,最老的版本 就用了一个ibatis 框架,连spring都没有用,
而且也没有command service 和dao 分层,
后来我们加了spring框架后,事务老是配置不成功。项目没有用 struts ,就一个default servlet来控制所有非下载的请求, 
拿到command类的id,和方法名, 然后利用反射机制,invoke方法调用,
原本的事务都是自己写的,后来加了spring后 用过2中配置事务方式,aop和注解,
都没有办法在command层配置事务,配在service层事务是有效果的,就是在command层不起作用,
研究半天,发现可能是因为command层是用反射机制调用造成的。因为我们是在原有的项目中修改和加东西,所以要加struts不太可能,要改的东西太多太多,所以目前事务一直有问题。求高手帮忙,分析下,有没有方法在command层配置事务

解决方案 »

  1.   

    小弟才疏学浅 对你描述的东西  不甚理解啊command层是什么?  对应MVC 中的C 吗?如果是  控制层的话   为什么要在这一层加事物一个单元控制要对应多少的原子逻辑   事物要加在需要的原子逻辑上对于  dao--->service--->control     事物加在service上是正确的  一个事物内的所有操作都要在service中完成   退出service方法就等于退出了事物
      

  2.   

    使用Spring的事务模版吧, 可以解决你的问题.在需要用到的地方:
    类似这样
    pamirsTransactionTemplate.execute(new PamirsTransactionAction() {
                @Override
                public Object doInTransaction(PamirsTransactionStatus status) throws Exception { //需要放在事务控制里的代码}
    }
    事务模板的名字不一定是我这个,我这个是自定义的。
      

  3.   

    恩,你说的没错,应该是这样的,但是这个项目原来没有分层,只有1层,业务逻辑全在里面,
    spring是后加的,我们是希望不动原来代码的情况下,用spring事务。还有,现在好多人习惯,都是直接把业务逻辑写在command层,然后service层是直接调用dao的,至少我原来的软件公司的项目基本都这样,但是用的struts,所以spring事务可以用。