Пул потоков сервлетов и пул экземпляров сервлетов - веб-контейнером - PullRequest
2 голосов
/ 19 октября 2011

Я понимаю, что у веб-контейнеров, таких как jboss, есть параметр, указывающий количество потоков в создаваемом сервлете, то есть максимальное количество потоков, которое контейнер может создать для запуска на одном экземпляре сервлета.

Мой вопрос, однако, заключается в том, есть ли способ указать количество экземпляров сервлета, который будет создан? Если да, то какова цель? Необходимость в этом может заключаться в обработке запросов, когда, скажем, поток или потоки, работающие на одном экземпляре, каким-то образом повреждают эти данные сервлета или уничтожают () их - в целях резервирования.

1 Ответ

5 голосов
/ 19 октября 2011

РЕДАКТИРОВАТЬ : Берегись!Начиная с спецификации 2.4 сервлета интерфейс javax.servlet.SingleThreadModel устарел, без прямой замены.

В спецификации неясно, должны ли контейнеры создавать несколько экземпляров одного и того же сервлета,или всегда только один экземпляр.


Из спецификации сервлета 2.4 http://download.oracle.com/otndocs/jcp/servlet-2.4-fr-spec-oth-JSpec/

SRV.2.2 Количество экземпляров

Объявление сервлета, являющееся частьюдескриптора развертывания веб-приложения, содержащего сервлет, как описано в главе SRV.13 «Дескриптор развертывания», управляет тем, как контейнер сервлета предоставляет экземпляры сервлета.Для сервлета, не размещенного в распределенной среде (по умолчанию), контейнер сервлета должен использовать только один экземпляр для каждого объявления сервлета.Однако для сервлета, реализующего интерфейс SingleThreadModel, контейнер сервлета может создавать несколько экземпляров для обработки тяжелой загрузки запросов и сериализации запросов для конкретного экземпляра.

В случае, когда сервлет был развернут как часть приложения, помеченного в дескрипторе развертывания как распространяемый, контейнер может иметь только один экземпляр на объявление сервлета на виртуальную машину Java (JVMTM).Однако, если сервлет в распространяемом приложении реализует интерфейс SingleThreadModel, контейнер может создавать несколько экземпляров этого сервлета в каждой JVM контейнера.

В документе вы можете найти дополнительную информацию об Single ThreadМодель

...