2010-01-11 3 views
2

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

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

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

ответ

3

Возможно, посмотрите на Quartz Scheduler. Цитирование свой веб-сайт:

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

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

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

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

+0

Кварц - хорошее решение, если ваш кластер не находится в сценарии с высокой вероятностью: «Никогда не запускайте кластеризацию на отдельных машинах, если их часы не синхронизированы с использованием какой-либо службы синхронизации времени (демона), которая работает очень регулярно (часы должны быть в пределах секунды друг от друга) ». Я поставил аналогичный вопрос на сценарий JBoss с высокой вероятностью: http://stackoverflow.com/questions/30187061/how-synchronize-cron-jobs-in-a-clustered-jboss-6-2-eap –

Смежные вопросы