Я пытаюсь найти решение для обеспечения надежности в нашем webapp. Планируется сбрасывать sql вместе с данными, если соединение с сетью/соединение с базой данных теряется. В текущей реализации мы имеем Rest controller, Service, DAO. DAO выбрасывает PersistenceExcetpion
, и это распространяется до уровня контроллера.Надежность здания весной JPA webapp
Пример кода:
public MyDAOClass {
public void save(Object object) {
try {
entityManager.persist(object);
} catch (PersistenceException e) {
throw new DBException("Error occurred in save", e);
}
}
}
является исключение во время выполнения.
Теперь возникает актуальный вопрос. Один из товарищей по команде предложил иметь пользовательские исключения, например, например. InsertException, UpdateException
и т. Д. И если мы сталкиваемся с каким-либо из этих исключений, мы знаем, какая операция была выполнена на этом объекте, чтобы он мог быть сохранен в файле в соответствии с SQL.
Например. Допустим, что код не смог сохранить объект Employee
. Это вызовет InsertException
и создаст запись в файле в качестве вставки sql-инструкции для этого объекта. insert into employeee values ('firstname','lastname');
Для меня идея реализации создания sql-файла при потерях связи не кажется таким простым, как реализация вышеизложенного.
Заданные мной вопросы: 1) Как вы обрабатываете, когда в методе обслуживания выполняются несколько действий (например, любая комбинация вставки, обновления, удаления)? 2) Как насчет разных исключений? Я имею в виду, что причина для PerisistenceException
может быть чем-то вроде сдерживания ограничений, сущность не найдена и т. Д., А не только проблема подключения.
Есть ли способ реализовать описанный выше сценарий, который также учитывает все различные условия.
Спасибо.
Обновление: Основано на комментариях chrylis. Я должен был добавить это к вопросу. Это webapp, работающий локально в разных магазинах. И приложение не может иметь простой, поэтому, если какие-либо проблемы с подключением, приложение должно работать. Затем файл будет синхронизирован с центральным сервером базы данных.
Этот вид прокатки ваших собственных звуков звучит как абсолютно ужасная идея. Помимо всего прочего, вам придется защищать эти файлы, как-то иметь дело с транзакцией и координировать работу с несколькими экземплярами приложений, но не приносят никакой пользы (так как клиенты все равно должны иметь дело с другими сбоями). Просто верните ошибку 5xx. – chrylis
(И просто используйте данные Spring для ваших DAO.) – chrylis
@chrylis Я обновил вопрос с дополнительной информацией. Что касается вашего комментария. Для решения проблемы не существует. Под транзакцией вы имеете в виду при записи в файл? В этом случае координация не требуется, поскольку данные будут специфичными для хранилища. – HereToLearn