2016-09-26 1 views
1

Ich habe den folgenden Code, transaction innerhalb einer Datenbank-Operationen ausführt:Java-Transaktion: Wie Programm nach Rollback zu stoppen?

try { 
       //start transaction 
       repository.startTransaction(); 

       //carry out deletion logic 
       repository.deletedata() 

       //commit all 3 transactions 
       repository.commitTransaction(); 

     }catch (Exception e) {  
       repository.rollback(); 
      } 

Zeit, wenn es eine error ist beim Laufen, die Anwendung noch weiter läuft. Allerdings möchte ich die Ausführung des Programms auf stoppen, nachdem die Daten zurückgesetzt wurden.

Wie kann ich das am besten tun?

Antwort

1

Erstens, um die Ausführung zu beenden, sollten Sie Ihre eigene Business-Level-Ausnahme verwenden.

Zweitens, Aussage repository.rollback(); kann auch fehlschlagen. Nur eine Idee.

würde Mein Ansatz:

class MyApp { 
    public static final main(){ 
     new MyApp().run(); 
    } 

    private void run(){ 
     MyRepositoryProcessor proc = new MyRepositoryProcessor(); 

     try { 
      // Some loop here maybe... 
      proc.deleteFromRepo(); 
     } catch (MyDatabaseCommunicationException ex) { 
      System.exit(-1); 
     } 
    } 
} 

class MyRepositoryProcessor { 
    public void deleteFromRepo() throws MyDatabaseCommunicationException { 
     try { 
      //start transaction 
      repository.startTransaction(); 

      //carry out deletion logic 
      repository.deletedata() 

      //commit all 3 operations 
      repository.commitTransaction(); 

     }catch (Exception e) { 
      try { 
       repository.rollback(); 
      } catch (Exception ex){ 
       // Database connection failed completely, could not even do a rollback. 
      } 
      throw new MyDatabaseCommunicationException("Deletion failed"); 
     } 
    } 
} 
+0

Danke, obwohl, wie sich dies die Programmausführung stoppen? – java123999

+0

Es stoppt die Ausführung des Kontrollflusses bis zu dem Punkt, an dem die Ausnahme auftritt. Wenn Sie das Programm vollständig beenden möchten, sollten Sie es unbedingt höher als auf Datenbankebene tun. Sie könnten dann System.exit() mit einem geeigneten Code verwenden. –

+0

Ok, also System.exit() nach dem Rollback der Datenbank hinzufügen? – java123999

Verwandte Themen