小弟在做一个项目,遇到一个问题,大致是这样的:在一个action里面,要调用service层的两个方法,这两个方法是把当前两个对象提交到数据库的,并且该方法会抛出异常,现在要保证该方法全部执行成功,才把这两个对象提交到数据库的,任何一个方法抛出异常就返回错误页面!恳请各位大侠说出思路,不只同步可不可实现。 

解决方案 »

  1.   

    ...用2个if不就行了吗?反正你判断哪一个如果不行的话都要报错,又不存在同步的问题
    if(Manager A.method){
     if(Manager B.mehtod){
        return SUCCESS;
     }else{
       return ERROR;
     }
    }else{
     return ERROR;
    }
    不知道我这样理解你对不对?
      

  2.   

    if(Manager A.method){ 
    if(Manager B.mehtod){ 
        return SUCCESS; 
    }else{ 
      methodReturnA();
      return ERROR; 

    }else{ 
    return ERROR; 
    } 你可以再action里面再写1个方法
    methodReturnA,如果A不成功,就报错了,如果A成功了,B不成功,B就不执行了,在返回错误之前调用action的methodReturnA方法,用来返回A中的数据。
      

  3.   

    事务不显示吧,是不同的Manager吧,要不你写成1个manager做一下事务的控制,就可以做事务回滚了
      

  4.   

    这不就是事务处理吗!
    在service层进行事务管理,把2个方法合成1个。
      

  5.   

    可以考虑用ejb 控制一下事务 我们现在都是通过ejb进程事务控制的。还有如果要是用到了spring框架 可以用spring框架控制事务。
    我觉得ejb是个比较不错的东西。你要有一个大的service方法 然后还要两个小的service 方法。在action里调用这个大的service 方法然后大service 方法里分别调用那两个插入对象的方法!
      

  6.   

    你不能直接在action里分别调用这两个方法!
      

  7.   


    得,EJB都整出来了。为了做个事务处理还得把项目重做一遍!
      

  8.   

    事务处理。如果你用了spring
    如果你除了 action service 之外还有一层 dao如果你的 service 是调用的 dao层,并且你的事务配置是在 service层,那么,把你的两个插入操作写在同一个service
    方法里面,外加 try catch,例如  saveAandB(A, B)然后在 action 里面调用这个service 中的 saveAandB(A, B)
    方法。
      

  9.   

    try{
     method1();
     method2();
     commit();
    }catch(Exception e){
     rollback();
    }
      

  10.   

    如果你这两个方法在同一个service中的话,可以用其中一个方法调用别一个方法,然后这个方法启用事务处理。如果不在同一个service的话,就在action中自己写个事务吧。
      

  11.   

    我明天就把钱从银行把我那几百块取出来放我枕头底下,安全!!!
    思路:如果被调用的两个方法都是Code管理Transaction的,你就没办法实现你说的那个目的,只有自己重写个新的方法,把那两个方法的实现Copy进来,用一个Transaction来控制。如果那两个方法是用Container的declarative Transaction, 还得看他们的Transaction Attribute,
    如果是Required/Mandatory/Supports的,你就在你的Action 的方法加上transaction--Required呃,我觉得说多了也没啥用.......
      

  12.   

    直接判断只要其中有一个不成功,就把将要保存的数据从表中删除。即使表中还没有数据被保存调用delete也不会报错。
      

  13.   

    感觉lz分层逻辑有问题,
    一个service中的方法就是执行一个操作。
    根据lz的描述,应该是一个方法中执行2个关于数据插入的操作。按照我的想法,
    应该是一个service中的方法调用2个dao中的方法。
    然后事务处理配置在这“一个”service方法上。
    在这个方法中,无论什么位置出现例外,事物都会回滚。也就是实现了lz所谓的“保证一次调用两个操作并且保证数据完整性”的需求了。这是我的个人理解,错了还请见谅。呵呵good luck