跨职能管理交易

时间:2012-08-12 08:58:51

标签: java transactions

我们有一个java应用程序,在此之前,所有操作都在多线程应用程序的run函数中完成。现在我们将一些代码移到一个单独的函数中。我们必须将一些变量作为全局变量包括连接,以便可以在函数中使用它。下面是运行和调用函数的框架。现在问题是那些在if语句中处理的查询并且它们遇到问题然后整个事情进入catch和rollback。现在的问题是那些在processOne函数中调用的问题,如果它们遇到任何catch,那么在执行else之后运行的一般查询也会执行。有没有办法停止或将其链接到processOne错误?我们的想法是使用全局变量,因为尝试了dbConn.rollback,它也可以工作。

public void run() {
 try{
  if(){
    //process here
  }
  else{
    // call function processOne
  }
  //some other general queries
  dbconn.commit();
 }

 catch (SQLException ex){ 

  try{    
  dbconn.rollback();  
  } 
  catch (Exception rollback){    

  }
 }
}

void processOne(){
  try{
   //process queries here
  catch (SQLException ex){                         
    try{    
     dbconn.rollback();  
    } 
    catch (Exception rollback){    

    }
  }
}

1 个答案:

答案 0 :(得分:2)

您需要做的就是从processOne函数抛出异常,然后在'run`函数中捕获它并回滚事务:

public void run() {
 try{
  if(){
    //process here
  }
  else{
    // call function processOne
  }
  //some other general queries
  dbconn.commit();
 }

 catch (SQLException ex){ 

  try{    
  dbconn.rollback();  
  } 
  catch (Exception rollback){    

  }
 }

  catch (Exception ex){ 

  try{    
  dbconn.rollback();  
  } 
  catch (Exception rollback){    

  }
 }
}

void processOne() throws Exception{

   //process queries here

  }
}

这样就可以回滚整个过程。