2012-05-10 1 views
2

мне было интересно ... Скажем, у меня есть два лица без бобов в EJB 3.1:@ Бесконечный боб с @EJB гарантированно является уникальным экземпляром ejb?

  1. @Stateless Class1

    @EJB MyUniqueInstanceBean uniqueBean1;

2.

@Stateless 
Class2 

@EJB MyUniqueInstanceBean uniqueBean2; 

ли uniqueBean1 и uniqueBean2 гарантированно уникальные экземпляры MyUniqueInstanceBean?

+1

1. Измените свой вопрос, чтобы отформатировать код и не забудьте использовать скобки при необходимости (MyUniqueInstanceBean вводится внутри Class1 и Class2?). 2. Ответ зависит от того, как вы определили MyUniqueInstanceBean: ответ да, если и только если это Singleton – perissf

ответ

2

Если MyUniqueInstanceBean Без гражданства это не в ваших руках - вызовы uniquebean1 и uniquebean2 фактически вызывает тот же экземпляр. В EJB 3.1 спецификации это сказано со следующими словами:

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

Если MyUniqueInstanceBean является Stateful гарантируется, что uniquebean1 и uniquebean2 не относятся к одному экземпляру. Опять же из спецификации:

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

Если вы используете Singleton, то оба относятся к той же инстанции, потому что есть только один экземпляр:

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

+0

спасибо за разъяснение. Я подозревал, что stateful будет гарантировать уникальный экземпляр для Class1 и Class2. – user899757

+0

Как иметь одинаковые экземпляры экземпляра состояния, доступные в двух разных фазах без состояния, когда он является тем же самым клиентом, который ссылается на 2 разных фанатичных боба? – jch

Смежные вопросы