Безопасно ли получить доступ к домашнему объекту EJB из нескольких потоков? - PullRequest
4 голосов
/ 21 октября 2010

Я прочитал эту ветку: J2EE / EJB + сервисный локатор: безопасно ли кэшировать результат поиска EJB Home? Я использую тот же подход, то есть получаю домашний объект EJB для моего объекта EJB и кэшаэто в сервлете.

Мой вопрос : Безопасно ли разделять этот объект между несколькими потоками?

Из спецификации EJB 2.1, которую я нашелтолько то, что параллельные вызовы объектных компонентов [через локальный / удаленный интерфейс] внутренне сериализуются контейнером.Однако спецификация не распространяется на параллельные вызовы домашних объектов.

У кого-нибудь есть идея?Ссылка на точное место в спецификации / документе также была бы очень кстати.

Ответы [ 3 ]

3 голосов
/ 23 октября 2010

EJBHome и EJBObject одинаково безопасны для потоков. Контейнер несет всю ответственность за безопасность потоков этих реализаций.

Очень часто сервер приложений создает один экземпляр EJBHome или EJBLocalHome компонента и привязывает его непосредственно к JNDI для общего доступа ко всем приложениям. Могу поспорить, что если вы дважды посмотрели свой EJBLocalHome из сервлета и сравнили их ==, то, скорее всего, это был точно такой же экземпляр.

0 голосов
/ 22 сентября 2012

Помимо технической безопасности, существует проблема психической безопасности.

Принимая это во внимание, каждое использование домашних объектов EJB 2.1 следует считать небезопасным. Вам будет гораздо лучше взглянуть на более разумный подход EJB 3, чем тратить время на EJB 2.x.

0 голосов
/ 16 сентября 2012

Я не думаю, что EJBHome является потокобезопасным, потому что

Сначала, чтобы получить EJBHOme Object, мы получаем помощь Синхронизированного объекта, такого как Свойства и Hashtable

Во-вторых, если мы реализуем BusinessDeleigate Design Pattern длякеш EJBHome Объект мы используем синхронизированную карту для хранения EJBHome.Поэтому только один поток может получить доступ к EJBHome.

...