планирование задач на JBoss с кластеризацией - PullRequest
2 голосов
/ 11 января 2010

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

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

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

1 Ответ

4 голосов
/ 11 января 2010

Может быть, посмотрите на Кварцевый планировщик . Цитирую свой сайт:

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

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

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

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

...