Одной из задач приложения, которое я разрабатываю, является резервное копирование данных других приложений, работающих в системе. Я хочу запланировать этот процесс резервного копирования так, чтобы он мог выполняться без присмотра. Я использую утилиты таймера JEE6 / EJB3.1.
У меня есть класс BackupConfiguration, который я сохраняю в базе данных, используя JPA2, которая имеет поле типа TimerHandle. Если пользователь решает запланировать резервное копирование, я создаю новый постоянный таймер и заполняю поле TimerHandle.
Если я перезагружаю сервер, все в порядке, таймеры перезагружаются (и возникает краткая паника, поскольку все таймеры срабатывают одновременно, вздыхают), и все так, как я оставил.
Если я повторно разверну приложение (что происходит довольно часто, пока я его разрабатываю), все таймеры будут потеряны! Я тупо предполагал, что таймеры будут привязаны к серверу, но оказывается, что они привязаны к приложению.
Итак, мой вопрос, каков наилучший способ сделать таймеры устойчивыми при повторном развертывании?
Единственное решение, которое я вижу, это сохранить ScheduleExpression, а также TimerHandle с резервной конфигурацией. Затем, если у меня есть ручка, но нет таймера, я воссоздаю таймер. Однако основная проблема заключается в том, что это означает перечисление каждого запланированного объекта каждый раз, когда приложение начинает выяснять, отсутствуют ли таймеры. Сейчас это не так много работы, но в будущем это может вылиться в огромные затраты.