Статические и инстансные члены в EJB без гражданства - PullRequest
1 голос
/ 13 октября 2009

У меня есть сессионный компонент без сохранения состояния, которому нужен доступ к фабричному классу. Лучше всего объявить этот фабричный класс как статический или экземплярный элемент в SLSB? Правильно ли я сказал, что при повторном использовании SLSB будет создан только один экземпляр фабрики для каждого компонента (при использовании опции элемента экземпляра), а не один экземпляр для запроса?

Ответы [ 3 ]

1 голос
/ 13 октября 2009

Не думайте, что экземпляр SLB не будет создан для каждого запроса. Контейнер имеет право создавать один каждый запрос; также разрешено иметь только один экземпляр (я думаю). В более общем случае контейнер будет поддерживать их пул.

Если создание экземпляра и / или инициализация вашей SLSB относительно дороги, вы должны точно выяснить, что будет делать ваш контейнер, и, если возможно, настроить его явно так, как вы хотите.

Если вы это сделаете, тогда не должно возникнуть проблем с сохранением поля экземпляра в классе SLSB.

1 голос
/ 13 октября 2009

Экземпляры SLSB объединяются и, следовательно, обслуживают потенциально много запросов в течение срока их службы, поэтому, как вы говорите, переменные экземпляра не воссоздаются для каждого запроса.

«Естественным» способом для SLSB является независимость каждого экземпляра, отсутствие статики, отсутствие необходимости синхронизации между экземплярами. Следовательно, если это возможно, у меня будет экземпляр фабрики для каждого экземпляра SLSB.

0 голосов
/ 26 октября 2012

Переменные экземпляра не воссоздаются до тех пор, пока SLSB повторно используется из пула. Жизненный цикл SLSB довольно прост: создайте экземпляр, используйте его n раз для обслуживания n запросов и, в конечном итоге, выбросьте его. Все эти действия выполняются контейнером. Таким образом, в процессе создания бина (контролируемого нами) мы можем инициализировать эти переменные экземпляра. Но никогда не изменяйте содержимое этих переменных после их инициализации, чтобы избежать побочных эффектов.

Вы можете использовать статические экземпляры, если хотите, но имейте в виду, что вы должны решать проблемы синхронизации вручную; и, кроме того, вы ограничены местной фабрикой.

EJB 3.1 предлагает очень элегантное решение с @Singleton EJB.

...