Если вы хотите полагаться исключительно на объект EJB, вы хотите использовать таймеры EJB. Таймеры EJB сохраняются на перезапуске сервера и могут создаваться динамически. Они полагаются на Session Bean, чтобы взять на себя роль обработки тайм-аута (в этом случае отправка электронной почты).
Яркой стороной таймеров EJB является то, что они постоянны (если не указано иное, вы можете сделать их не постоянными), и что они выживают при перезагрузке сервера. Они будут даже срабатывать, если срок истечения срока действия сервера при перезапуске сервера.
Темная сторона таймеров EJB заключается в том, что постоянные таймеры ПОТЕРЯТЬ, когда приложение перераспределено. Таким образом, если вы измените какую-то логику или что-то несвязанное, требующее повторного развертывания приложения, таймеры будут сброшены (поскольку они привязаны к приложению).
Этот аспект может сделать их разочаровывающими в использовании, так как вам понадобится ваша собственная инфраструктура для перезапуска таймеров, которые теряются при перераспределении сервера. Это не сложно, в основном вы храните тень таймера EJB в своей собственной базе данных, и когда ваша система развертывает событие запуска, эта таблица синхронизируется с существующими таймерами, о которых знает контейнер. Затем у вас есть метод тайм-аута EJB, который удаляет таймер из БД при выполнении задачи.
Это не сложно, но это раздражает, а захват данных таймера - это 85% всего процесса «сделать что-то позже» в первую очередь. Но что есть, то есть.
Вы также можете посмотреть Quartz, популярную структуру планирования, которая будет запущена в уровне Servlet.
Thanx много! Это было полезно. – user3050792