Какие инструменты существуют для пакетных процессов по времени в Java EE?
Вопрос
Мой работодатель только что попросил меня запустить синхронизированный пакетный процесс в приложении Java EE WebSphere, которое они используют.Предполагается, что определенный урок будет проводиться каждый день в 23:30.
Я не очень знаком ни с Java EE, ни с сервером WebSphere (или tomcat в среде разработки), и я копался, но все, что я нашел, это класс таймера Java, но не то, как его установить или вызвать. .
Кажется, также необходимо отредактировать файл web.xml.
Любая помощь будет оценена по достоинству!
Решение
Вам стоит посмотреть открытый исходный код Кварцевая библиотека из ОпенСимфони.Очень прост в использовании и идеально подходит для подобных вещей.
TimerTasks лучше всего подходят для запуска чего-либо в течение короткого времени в будущем.Но для повторного исполнения в таких больших временных рамках Quartz превосходен.Вы даже можете хранить список предстоящих задач в постоянном хранилище, например в файле или базе данных, чтобы предстоящие запланированные задания не терялись при перезапуске приложения.
Кроме того, в среде Spring есть фантастическая абстракция для Quartz.
Другие советы
В WebSphere вы можете использовать службу планировщика для запуска выполнения метода в классе Java.Планировщик предоставляет календарь для планирования выполнения заданий (аналогично cron), или вы можете разработать свой собственный.
Вот ссылка на страницу с описанием планировщика в документации WAS 6.1:
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp
В EJB 3.1 будут улучшены службы таймеров, а также средства поддержки жизненного цикла приложений, которые устранят необходимость использования сервлетов для запуска задач без взаимодействия с пользователем.
Это может быть ответом на заголовок вопроса, но для «реального» вопроса, касающегося устаревшего приложения (написанного более 6 месяцев назад;)), работающего в веб-сфере, я бы рекомендовал использовать стартовый сервлет и службу таймера EJB.
Служба таймера в J2EE 1.4 (EJB 2.1)
Для EJB 3.0 (и 3.1, как только она появится) есть несколько хороших аннотаций;)
Я бы не представил еще один библиотека если только вам это ДЕЙСТВИТЕЛЬНО не нужно.Службы таймера должно быть достаточно для ежедневного выполнения произвольной работы.
ХТХ,
Мартин
В вашем web.xml вы можете настроить сервлет для загрузки при запуске.
Синтаксис:
u003Cservlet servlet-name='hello'n servlet-class='test.HelloWorld'>
<загрузка при запуске/>
</сервлет>
Сделайте это, затем в методе init сервлета вы сможете настроить Timer/TimerTask, чтобы он делал все, что вам нужно.TimerTasks похожи на потоки, за исключением того, что вы можете запланировать их запуск.
Quartz является частью стандартного дистрибутива JBoss 4.2.x.
И это действительно хорошая библиотека, в которой без особого труда можно определить простые рабочие процессы.
В WebSphere нет поддержки планирования.
Если вы используете Unix, вы можете использовать crontab, чтобы запланировать запрос на страницу вашего веб-приложения.Я полагаю, что в Windows также есть возможность запланировать запрос на страницу.В моем crontab я планирую запрос на веб-страницу каждый день в 8:45.
45 8 * * * ПОЛУЧИТЬ http://www.domain.com/myBatch?securitykey=verysecret
Теперь каждое утро вызывается сервлет myBatch, и там я могу делать все, что нужно в это время.Чтобы другие не звонили на эту страницу и не запускали пакет, я добавил параметр securitykey.
В WebSphere имеется поддержка планирования.