как остановить фоновые потоки приложения под WebSphere - PullRequest
3 голосов
/ 15 декабря 2011

Развертываем приложение в кластере WebSphere. Приложение запускает свои собственные никогда не завершенные потоки, которые проверяют некоторые условия, например:

while(true){
  logger.severe("Unterminated thread");
  Thread.sleep(10000);
}

Проблема заключается в том, что после остановки приложения (через wsadmin или консоль администратора) в WebSphere незарегистрированные только сервлеты эти темы не убивают и все еще работают. Есть ли способ, как убить этот шаг, когда я останавливаю приложение? Мы используем WebSphere 7.

спасибо

Ответы [ 2 ]

6 голосов
/ 15 декабря 2011

Никогда не следует создавать потоки вручную из приложения JavaEE.Управление потоками - это то, что должно обеспечиваться контейнером JavaEE.

В WebSphere есть механизм WorkManager, который поможет вам удовлетворить потребности в потоках.Пожалуйста, посмотрите этот учебник для деталей реализации.

4 голосов
/ 15 декабря 2011

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

Я предполагаю, что в обычном Java-приложении, откуда этот код, эти фоновые потоки каким-то образом получают сигнал на остановку.Я бы посоветовал использовать ServletContextListener для отправки сигнала остановки, когда все ваши сервлеты были отменены.

Обратите внимание, что если у вас еще нет способа сообщить потокамостановка, это, вероятно, другая ошибка, и это совсем не поможет.

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