Потоки в приложении Java EE - PullRequest
       39

Потоки в приложении Java EE

2 голосов
/ 11 октября 2009

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

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

Ответы [ 3 ]

8 голосов
/ 11 октября 2009

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

7 голосов
/ 11 октября 2009

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

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

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

2 голосов
/ 11 октября 2009

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

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

...