我要操作webService和本地数据库同步,webService向远程插入数据,想在业务逻辑层处理,如果执行成功那么本地也插入数据库,如果失败本地回滚。要么执行要么回滚
请各位指导一下怎么开发比较好,

解决方案 »

  1.   

    补充,我要根据webService的返回结果判断是否提交或回滚(webService是其他语言写的)
      

  2.   

    首先说 我没有搞过 但是我觉得应该是用JTA解决吧 
      

  3.   

    首先,webService那边的事务你是无法控制的,那是他那边的事情, 你只能控制你这边的事务,
    这种操作最好的举例子就是购物吧,比如说,只有银行扣款成功,我这边才能往数据库里面插入买卖信息!
    银行的转账信息,一个账号扣钱和一个账号加钱这是银行的事,与你无关
    所以你的业务方法里面调用webService时根据返回值. 如果是我做webService服务的话, 我会返回一个枚举给你.! 枚举的意思就是成功/失败.! 
    在你自己的方法里面, 插入的时候不要提交, 判断返回值成功,再提交, 或者成功再插入也可以
      

  4.   

    好像楼上的是有道理的,但是我想把控制webService放在业务层,而插入数据库放在daoimpl里面
      

  5.   

    扯淡,照这个思维不同银行之间转账就出大BUG了
      

  6.   

    这个不是什么问题吧,用jta事务能保证提交的一致性。如果远程处理有错误一定会抛异常,整个事务就可以回滚,但要正确设置回滚异常类型。
      

  7.   

    没必要使用jta 事物,如果简单的做,lou主可以使用本地使用来做,
    即本地数据操作先执行,然后调用webservice的操作,对方返回ok就将本地的事物commit,如果失败就rollback。因为你这个没有本地事物失败,需要让webservic回滚的需求。所以没有必要使用两次提交的XA transaction。
    如果需要保证本地事物失败,让webservic事物回滚的需求。那么你的数据库操作和远程webservice必须提供XAResource的实现。使用容器的jta事物,获取spring支持的jta事物。首先你的数据支持两次提交吗?webservice事物控制来两次提交估计不太好做。估计人为修改比较多。
      

  8.   

    用webservice 调用远程方法,事务控制也应该在远程写好的。如果远程成功你就插入,失败你就回滚。