2016-09-26 18 views
1

私はtransaction内のデータベース操作を実行する次のコードがあります実行している場合errorがある場合、アプリケーションがまだを実行し続けて現在Java Transaction:ロールバック後にプログラムを停止する方法は?

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

       //carry out deletion logic 
       repository.deletedata() 

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

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

を。ただし、データのロールバック後にプログラムの実行をにしたいと思います。

これを行うにはどうすればよいですか?

答えて

1

まず、実行を終了するには、独自のビジネスレベル例外を使用する必要があります。

第2に、文repository.rollback();も失敗する可能性があります。ちょうどアイデア。

私のアプローチは、次のようになります。

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

おかげでいくつかのドキュメントを見つけることができますか? – java123999

+0

例外を捕捉するポイントまで制御フローの実行を停止します。あなたが完全にプログラムを終了する場合は、間違いなくデータベースレベルでそれを行う必要があります。次に、適切なコードでSystem.exit()を使用できます。 –

+0

これでデータベースのロールバック後にSystem.exit()を追加しますか? – java123999

関連する問題