EJB или Servlet - как добавить 'kill switch', чтобы принудительно остановить процесс / поток - PullRequest
1 голос
/ 19 июля 2010

Вид открытого вопроса, с которым я сталкиваюсь время от времени - если у вас EJB-компонент с состоянием или без состояния, или, возможно, прямой сервлет-процесс, который может с неправильными параметрами долго работать в производственной системе, как Не могли бы вы эффективно добавить вручную «переключатель выключения» для администратора / человека, чтобы специально уничтожить этот поток / процесс?

1 Ответ

0 голосов
/ 20 июля 2010

Вы не можете или, по крайней мере, не должны вмешиваться в потоки сервера приложений напрямую.Таким образом, «переключатель уничтожения» выглядит совершенно неприемлемым для меня в среде Java EE.

Я, тем не менее, понимаю проблему, с которой вы столкнулись, но я бы предпочел использовать асинхронный подход, когда вы разделяете свою работу на более мелкие рабочие единицы,

Я сделал это с помощью таймеров EJB и был доволен результатом: для первого рабочего блока создан начальный таймер.Когда приложение.сервер выполняет таймер, затем он регистрируется как второй, соответствующий второму рабочему блоку и т. д. Информация может передаваться из одного рабочего блока в другой, поскольку таймеры EJB поддерживают хранение пользовательской информации.Кроме того, таймер выполнения и регистрации является транзакционным, что хорошо для работы с базой данных.При таком подходе вы даже можете завершить работу и перезапустить сервер приложений.Перед выполнением каждого рабочего блока мы проверяли в базе данных, было ли задание отменено за это время.

...