Web アプリケーションに信頼性を組み込むための解決策を見つけようとしています。ネットワーク接続/データベース接続が失われた場合、SQL をデータと共にダンプする計画です。現在の実装では、Rest コントローラー、サービス、DAO があります。DAO が をスローPersistenceExcetpion
し、それが Controller レイヤーまで伝搬されます。
コード例:
public MyDAOClass {
public void save(Object object) {
try {
entityManager.persist(object);
} catch (PersistenceException e) {
throw new DBException("Error occurred in save", e);
}
}
}
これDBException
はランタイム例外です。
さて、実際の質問が来ます。チームメイトの 1 人が、たとえば次のようなカスタム例外を設定することを提案しました。InsertException, UpdateException
これらの例外のいずれかが発生した場合、そのエンティティに対してどの操作が実行されたかがわかるため、適切な sql としてファイルに保存できます。
例えば。コードがEmployee
エンティティの保存に失敗したとしましょう。これにより がスローInsertException
され、そのエンティティの insert sql ステートメントとしてファイルにエントリが作成されます。insert into employeee values ('firstname','lastname');
私にとって、接続が失われたときにSQLファイルの作成を実装するという考えは、上記の実装ほど単純ではないようです。
私が提唱した質問は次のとおりです。1) 複数のアクション (挿入、更新、削除の任意の組み合わせなど) がサービス メソッドで実行された場合、どのように処理しますか? 2) さまざまな例外についてはどうですか? PerisistenceException
つまり、接続の問題だけでなく、制約の失敗、エンティティが見つからないなどの理由が考えられます。
すべての異なる条件も考慮する上記のシナリオを実装する方法はありますか。
ありがとう。
更新: chrylis のコメントに基づきます。私はすでにこれを質問に追加しているはずです。これは、さまざまな小売店でローカルに実行されている Web アプリケーションです。また、アプリケーションにダウンタイムが発生することはあり得ないため、接続に問題が発生した場合でも、アプリは動作し続ける必要があります。ファイルは後で中央データベース サーバーと同期されます。