планирование задач на JBoss с кластеризацией

Мне нужно иметь возможность запускать некоторые запланированные задачи (отчеты) для приложения EJB, работающего на JBoss 4.2.

В моей первоначальной реализации я использую сервлет в связанном файле WAR для чтения некоторой конфигурации из файла свойств, а затем сбрасываю запланированные задачи с помощью API службы таймера. Это работает, но кажется немного неудобным отключать инициализацию в веб-проекте. Также я не уверен, что это будет работать должным образом, когда приложение развернуто в кластерной среде.

Каковы наилучшие практики для выполнения этого типа задач? Должен ли я использовать что-то другое, кроме Timer Service, и есть ли лучший способ инициализировать таймеры при запуске сервера?


person JayL    schedule 11.01.2010    source источник


Ответы (1)


Возможно, взгляните на Quartz Scheduler. Цитирую его сайт:

Quartz — это полнофункциональная система планирования заданий с открытым исходным кодом, которую можно интегрировать или использовать вместе практически с любым приложением J2EE или J2SE — от самого маленького автономного приложения до крупнейшей системы электронной коммерции. Quartz можно использовать для создания простых или сложных расписаний для выполнения десятков, сотен или даже десятков тысяч заданий; задания, задачи которых определены как стандартные компоненты Java или EJB. Планировщик Quartz включает множество функций корпоративного класса, таких как JTA-транзакции и кластеризация.

Я использовал его в прошлом для запуска заданий EJB, и все решение работало очень хорошо с очень хорошей масштабируемостью. Чтобы использовать его с EJB, вам потребуется использовать JobStoreCMT. для хранения информации о расписании (задание, триггеры и календари). Чтобы настроить ресурсы для выполнения заданий, ознакомьтесь с Настройка параметров ThreadPool док. Затем просто позвольте EJB-клиенту выполнять свою работу по распределению нагрузки запросов по разным экземплярам, ​​если EJB развернуты в кластере.

Сам Quartz также может быть кластеризован для обеспечения высокой доступности и масштабируемости за счет отказоустойчивость и балансировка нагрузки при необходимости.

Что касается упомянутого вами файла свойств, я не уверен, какие именно данные вам нужно прочитать, но без сервлета, если вам нужно что-то прочитать, вам придется прочитать это из базы данных.

person Pascal Thivent    schedule 11.01.2010
comment
Quartz — хорошее решение, если только ваш кластер не находится в сценарии высокой доступности: никогда не запускайте кластеризацию на отдельных машинах, если их часы не синхронизированы с помощью какой-либо службы синхронизации времени (демона), которая работает очень регулярно (часы должны быть в пределах секунды). друг друга). Я задал аналогичный вопрос для сценария JBoss с высокой доступностью: stackoverflow.com/questions/30187061/ - person Ricardo Vila; 12.05.2015