Кварц в веб-приложении - PullRequest
       5

Кварц в веб-приложении

5 голосов
/ 14 апреля 2010

У меня есть вопрос в планировании заданий в веб-приложении. Если нам нужно планировать задания в веб-приложении, мы можем использовать java util Timer / TimerTask или Quartz (есть и другой механизм планирования, но я рассмотрел Quartz). Я думал о том, какой из них использовать, когда я зашел на сайт http://oreilly.com/pub/a/java/archive/quartz.html?page=1, который говорит, что использование таймера имеет плохой эффект, так как создает поток, который находится вне контроля контейнеров в последней строке. На других страницах обсуждается Quartz и его возможности, но я могу прочитать, что Quartz также использует поток и / или пул потоков для планирования задач. Я предполагаю, что эти темы также не находятся под контролем контейнеров

Кто-нибудь может мне это уточнить Безопасно ли использовать Quartz в моих веб-приложениях, не создавая зависания потоков или проблемы с блокировкой потоков? Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 14 апреля 2010

Кто-нибудь может мне это объяснить. Безопасно ли использовать Quartz в моих веб-приложениях, не создавая зависания потоков или проблемы с блокировкой потоков?

И кварц, и JDK Timer запускают неуправляемые потоки, которые не имеют доступа к контекстной информации Java EE, это самая большая проблема. Кроме того, они могут использовать ресурсы, о которых [сервер приложений] не знает, существуют без возможности администратора контролировать их количество и использование ресурсов и препятствовать способности сервера приложений корректно завершать работу или восстанавливать ресурсы после сбоя (см. Неуправляемые темы ).

С учетом вышесказанного я не сталкивался с зависаниями потоков или проблемами с блокировками (хотя, думаю, это зависит от того, что вы с ними делаете).

Если это действительно проблема, рассмотрите возможность использования реализации JSR-237 Timer и WorkManager (которая работает с управляемым потоком), например Foo-CommonJ вместо кварцевого или таймера JDK.

1 голос
/ 14 апреля 2010

Если я скажу в одной строке, я бы сказал, используйте Quartz, так как он позаботится о том, чтобы управлять работой, связанной с низкоуровневым планированием. С помощью таймера вы можете делать все, что делает кварц (даже заставить потоки таймера продолжать опрос, чтобы проверить, запущено ли веб-приложение, и выйти в противном случае). Но это должно быть сделано в вашем коде вами. С Кварцем все это вы получаете из коробки.

Теперь подробности Кварц обеспечивает 1. Постоянство работы 2. Управляемый пул потоков, поэтому вы создаете соответствующее количество потоков и заставляете задания ждать после этого. 3. Инициализация сервлета для интеграции с вашим веб-приложением. Когда приложение закрывается, я думаю, что оно позаботится о том, чтобы закрыть ваши темы, но я не пробовал. Поэтому я бы не стал много комментировать. 4. Планирование на основе RMI для кластерных сред.

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

1 голос
/ 14 апреля 2010

Оба подхода создали неуправляемые потоки. Я использую Quartz для планирования, а не Java-таймер, поскольку он обеспечивает большую гибкость (например, выражения cron) и лучше управляем.

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