2010-08-24 4 views
1

Мы используем EJB TimerService: s для управления задачами, которые должны выполняться по запросу или запускаться с помощью выражения cron, некоторые из них будут запускаться каждую ночь, например. статистические коллекторы, а некоторые будут запускаться каждые 10 с, например. проверка новых заказов, которые необходимо обработать, мы также должны иметь возможность включать и выключать их. Он отлично работает в большинстве случаев, но иногда процессы не могут быть остановлены, и единственный способ устранить проблему - это очистить TimerPool и перераспределить приложение.Spring альтернатива TimerService в EJB 3

Я искал другое решение нашей проблемы, и мы попробовали версию с более контролирующей функциональностью, в примере ниже: http://www.adam-bien.com/roller/abien/entry/legally_starting_threads_in_ejbs

Он отлично работает, но у меня есть ощущение, что мы» довольно близко к границе того, как вы должны работать с EJB.

Я смотрел на выполнение задач и планирование: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/scheduling.html

И похоже, способ избавиться от EJB: s, так как мы используем только их для TimerService и связи между контроллером и фактическая задача.

Проблема в том, что мне нужно больше контроля, чем статические файлы конфигурации, и, возможно, домашний сваренный SchedulerFactoryBean будет работать, но я действительно не знаю, с чего начать?

Тип работ

ProcessEngine

  • будет выполняться каждые 10 сек и проверить, есть ли какие-либо новые клиенты и обрабатывать их заказы
  • должны быть в состоянии повернуть на двигатель и ВЫКЛ, либо с мылом, либо с помощью настройки в БД

StatisticsCollector

  • должны работать каждую ночь в 3 часа ночи по умолчанию
  • Должно быть в состоянии быть вызван для запуска прямо сейчас по требованию
+1

http://www.mkyong.com/spring/spring-quartz-scheduler-example/ Ну, я не уверен, в чем ваш вопрос.я не мог понять это хорошо, но если вам нужна таймерская задача и управление JOB весной, то с примерами посмотрите ссылку –

+0

. Это в значительной степени то, что я ищу, проблема в том, что мне нужно больше контролировать, как планируются задания и возможность включить и выключить их, как показано в примере, см. отредактированный пост. – orjan

ответ

1

Из комментария выше, я предполагаю, что вы нужен гораздо более сложный планировщик. Вы думали об использовании Quartz Scheduler?

Это с открытым исходным кодом, расширяемый и довольно мощный. Планирование выполняется с помощью выражений CRON, которые могут заполнять потребности, указанные в вашем сообщении.

Недостатки Quarts по сравнению с EJB заключаются в том, что запланированные задания не являются постоянными, он создает собственный пул потоков (который может во время выполнения не изменяются), и нет никакой справедливости в его алгоритме потоковой обработки (т. е. если задание не было уволено в назначенное время из-за голодания, оно обрывается). Тем не менее, у меня были хорошие впечатления от кварца в целом.

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