Подтвердить что ты не робот

Зачем запускать сеанс бездействия beans?

Stateless beans в Java не сохраняет свое состояние между двумя вызовами от клиента. Поэтому в двух словах мы можем рассматривать их как объекты с бизнес-методами. Каждый метод принимает параметры и возвращает результаты. Когда метод вызывается, в стеке выполнения создаются локальные переменные. Когда метод возвращает locals, удаляются из стека, и если бы были выделены некоторые временные объекты, они все равно собирали мусор.

С моей точки зрения, которая не отличается от метода вызова одного и того же экземпляра отдельными потоками. Итак, почему контейнер не может использовать один экземпляр bean вместо объединения нескольких из них?

4b9b3361

Ответ 1

Объединение делает несколько вещей.

Один, имея один bean на один экземпляр, вы гарантированно должны быть потокобезопасными (сервлеты, например, не являются потокобезопасными).

Во-вторых, вы уменьшаете потенциальное время запуска, которое может иметь bean. В то время как сеанс Beans является "без гражданства", они должны быть неактивными в отношении клиента. Например, в EJB вы можете ввести несколько ресурсов сервера в сеанс Bean. Это состояние является приватным для bean, но нет причин, по которым вы не можете удержать его от вызова к вызову. Итак, объединив Beans, вы уменьшаете эти поисковые запросы только тогда, когда создается bean.

Три, вы можете использовать пул bean в качестве средства дросселирования трафика. Если у вас всего 10 Beans в пуле, вы будете получать не более 10 запросов, работающих одновременно, остальные будут поставлены в очередь.

Ответ 2

Транзактивность модели Java EE использует контекст потока для управления жизненным циклом транзакции.

Это упрощение существует, поэтому нет необходимости реализовывать какой-либо конкретный интерфейс для непосредственного взаимодействия с объектом UserTransaction; когда транзакция извлекается из InitialContext (или вводится в сеанс bean), она привязана к локальной локальной переменной для повторного использования (например, если метод в вашем сеансе без состояния bean вызывает другой сеанс без состояния bean, который также использует инъецированную транзакцию.)

Ответ 3

Жизненный цикл сеанса безстоящих состояний beans - это не существует, пассивное и MethodReady (пассивное или неактивное) состояние. Чтобы оптимизировать perormance, вместо того, чтобы проходить через bean из состояния готовности в метод, контейнер управляет bean между активным и пассивным состояниями через обратные вызовы контейнера - ejbActivate() и ejbPassivate() там, управляя пулом bean.

sreenut

Ответ 4

Объединение повышает производительность.

Один экземпляр, обрабатывающий все запросы/потоки, приведет к большому количеству конфликтов и блокировок.

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

Контейнер может управлять размером пула на основе фактической активности.