Как я могу использовать API службы таймера J2EE в коде запуска сервлета? - PullRequest
0 голосов
/ 21 июня 2009

Для фонового задания, которое я хотел бы запустить в контейнере J2EE, я нашел предложение создать сервлет запуска и использовать API службы таймера для создания управляемого таймера (в ответах на Какие инструменты есть для синхронизированных пакетных процессов в J2EE? ).

Чтобы создать таймер, мне нужен контекст, который реализует API таймера. ( Пример )

В классе Servlet я переопределяю метод init, но он имеет доступ только к ServletContext, но не к SessionContext. ServletContext не имеет методов для создания таймеров, поэтому я застрял здесь.

Как получить доступ к службе таймера J2EE в коде запуска сервлета?

Ответы [ 2 ]

2 голосов
/ 21 июня 2009

Всякий раз, когда я слышу задание таймера, я не могу не думать, что это должно быть отделено от сервера приложений Java EE. Вы можете использовать что-то вроде Quartz, или запланированную задачу операционной системы, или менеджер пакетов, например AutoSys, но встраивание этого в сервлет кажется мне неправильным использованием сервлетов.

Контейнеры Java EE 5 имеют службу TimerService, которая является EJB. Возможно это поможет вам разобраться.

1 голос
/ 24 марта 2010

Вместо использования кода запуска сервлета (который будет выполняться после каждого перераспределения) я обнаружил, что он более удобен для запуска таймеров при запуске EJB. С EJB 3.1 и Singleton EJB это теперь возможно с гораздо меньшим количеством кода:

http://blogs.oracle.com/kensaks/entry/application_startup_shutdown_callbacks

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...