Я использую сервер Websphere. У меня есть сервлет, который действует как обработчик запросов. Поскольку запрос направлен на (большую часть) фоновой обработки, мне нужно просто создать поток, который будет выполнять все эти фоновые задания. Тем временем мой обработчик запросов должен вернуться после запуска этого потока. При просмотре журнала я обнаруживаю, что, как только обработчик запросов возвращается, поток фоновой обработки также, похоже, завершает свою работу, поскольку не выдает никаких сообщений журнала. Я пытался сделать фоновый поток демоном, но опять же он не оставляет никаких сообщений журнала. Разве поток процессора запросов, который запускается websphere, не остается живым в пуле потоков навсегда? В таком случае мой фоновый поток не должен продолжать работать? Даже если обработчик запросов умирает, разве не следует, что если фоновый поток является потоком демона, он должен продолжать выполняться?
Просьба уточнить. Если есть какой-то недостаток в моем понимании того, как websphere управляет своими потоками. Пожалуйста, помогите мне понять это.
РЕДАКТИРОВАТЬ : проблема была решена. На самом деле это было плохо. Я сдерживал объект HttpServletRequest, чтобы работать с ним в фоновом потоке. Но в любом случае он был уничтожен после возвращения запроса из сервлет. Так что в моем фоновом потоке произошла исключительная ситуация с нулевым указателем, и он завершался. Мне все еще нужно разобрать жизненный цикл объекта HttpServletRequest, и когда именно он будет уничтожен. Если вы поможете мне понять это, я буду благодарен ,
В любом случае, спасибо!
РЕДАКТИРОВАТЬ : Добавление того, что Спецификация сервлетов должно сказать по этому поводу:
Каждый объект запроса действителен только в рамках метода обслуживания сервлета, или
в рамках метода фильтра doFilter, если только асинхронная обработка
включен для компонента, и метод startAsync вызывается по запросу
объект. В случае, когда происходит асинхронная обработка, объект запроса остается
действует до завершения вызывается в AsyncContext. Контейнеры обычно перерабатывают
объекты запроса, чтобы избежать снижения производительности объекта запроса
создание. Разработчик должен знать, что ведение ссылок на объекты запроса
для которого startAsync не был вызван вне области, описанной выше, не
рекомендуется, поскольку это может иметь неопределенные результаты.