Как я не позволю Glassfish создавать новые сессии для каждого запроса? - PullRequest
0 голосов
/ 29 августа 2011

Glassfish 3.1.1 Джерси 1,8

У меня есть следующий сессионный компонент без сохранения состояния, представленный как ресурс JAX-RS. VehicleResource содержится в WAR, а другие EJB - в EJB-JAR. Все приложение упаковано и развернуто как EAR.

@Stateless
@Path("/")
@DeclareRoles({"production"})
public class VehicleResource {

private static final Logger logger = Logger.getLogger(VehicleResource.class.getName());
private static final long serialVersionUID = 1L;

@Context
private UriInfo uriInfo;

@EJB
private VehicleManagementLocal vehicles;

@EJB
private VehicleAliases aliases;
....

У меня есть клиент из Джерси, который отправляет запросы в отдел обслуживания. Сессия создается для каждого запроса. Это нормально / ожидается? При большом количестве запросов серверу быстро не хватает памяти. Почему это происходит, и есть ли какие-либо изменения конфигурации / кода, которые я могу внести, чтобы предотвратить новый сеанс для каждого запроса?

Редактировать На самом деле создается только один экземпляр сессионного компонента. Я моделирую нагрузку, многократно нажимая URI. Я изменил время ожидания сеанса до 5 минут (с 30). Сеансы теперь истекают и могут быть собраны сборщиком мусора достаточно быстро, чтобы не допустить исчерпания памяти на сервере. «Веб-контейнер: статистика сеансов» в разделе мониторинга Glassfish показывает, что у меня ~ 50 000 активных сеансов.

1 Ответ

2 голосов
/ 29 августа 2011

Сеанс создается для каждого запроса

Вы имеете в виду, что для каждого запроса создается новый экземпляр сессионного компонента без сохранения состояния? Если это так, и если вы не хотите, чтобы это происходило, вы можете аннотировать ваш сессионный компонент с помощью @Singleton.

Кроме того, если предоставляемая служба доступна только для чтения, вы можете добавить к ней @javax.ejb.Lock(READ), чтобы улучшить параллелизм и производительность.

Наконец, если вы не хотите использовать синглтон, но хотите ограничить количество экземпляров, создаваемых контейнером, посмотрите настройки размера пула: http://download.oracle.com/docs/cd/E18930_01/html/821-2418/beahx.html

...