2009-10-11 2 views
2

У меня есть приложение Java EE, которое состоит из двух компонентов. Сначала это служба, которая сбрасывает некоторую информацию из Интернета и заполняет ее в базе данных. Во-вторых, это веб-интерфейс (развернутый на tomcat), откуда пользователь может просматривать эту информацию.Темы в приложении Java EE

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

ответ

8

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

+0

do u думаю, что java.util.Timer и java.util.TimerTask классы могут использоваться для этой цели? Спасибо – craftsman

+0

Классы планирования Spring, о которых я упомянул в своем ответе, представляют собой хороший интерфейс для объектов параллельной Java-совместимости, таких как Executor, который действительно является тем, что вы должны использовать в современном приложении. – grkvlt

2

Нет ничего плохого в том, что у вас есть фоновые задания внутри веб-контейнера, но вы ДОЛЖНЫ разрешить веб-контейнеру знать об этом, чтобы его можно было остановить и начать правильно.

Посмотрите на тег load-on-startup в web.xml. Есть несколько советов по http://wiki.metawerx.net/wiki/Web.xml.LoadOnStartup

7

В зависимости от типа рамки приложения Spring позволяет использовать Quartz или фреймворк java.util.concurrent. Spring имеет абстракцию TaskExecutor (см. Весна documentation), которая упрощает это, но проверьте, что лучше всего подходит для вашего дизайна.

Spring или Quartz (управляется Spring) затем контролирует создание и запуск/остановку потоков или исполнителей или заданий, а также их частоту/период и другие параметры планирования, а также управляет любым пулом заданий, которые могут потребоваться.

Я использую их для всех моих фоновых задач и пакетных заданий в любых приложениях Java EE, которые я пишу без проблем. Поскольку заданиями являются POJO, управляемые Spring, у них есть доступ к полной инфраструктуре инъекций зависимостей и т. Д., Что подразумевает Spring, и, конечно же, вы можете переключаться между фреймворками планировщика с простым изменением на ваш XML-файл конфигурации приложения, поскольку ваши потребности изменяются или масштабируются ,

+0

+1 на кварце, я использовал его во многих приложениях j2ee для планирования фоновых процессов. – broschb

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