J2EE / EJB + сервисный локатор: безопасно ли кэшировать результаты поиска EJB Home? - PullRequest
4 голосов
/ 28 апреля 2010

В приложении J2EE мы используем EJB2 в weblogic.

Чтобы не терять время на создание начального контекста и поиск интерфейса EJB Home, я рассматриваю шаблон локатора службы .

Но после нескольких поисков в Интернете я обнаружил, что даже если этот шаблон часто рекомендуется для кэширования InitialContext, у EJB Home есть некоторое негативное мнение.

Вопросы:

  • Безопасно ли кэшировать результат поиска EJB Home?
  • Что произойдет, если один мой кластерный узел больше не работает?
  • Что произойдет, если я установлю новую версию EJB без обновления кэша локатора службы?

Ответы [ 3 ]

4 голосов
/ 28 апреля 2010

Безопасно ли кэшировать EJB Home lookup результат?

Да.

Что будет если один мой кластер узел больше не работает?

Если ваш сервер настроен на кластеризацию / WLM, то запрос должен автоматически переключаться на другой сервер в кластере. Информация о маршрутизации закодирована в заглушке IOR.

Что будет, если я установлю новый версия EJB без обновления кеш сервисного локатора?

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

Обратите внимание, что инъекция @EJB в EJB3 эффективно стимулирует домашнее кэширование. (Хотя, по общему признанию, это также позволяет кэширование SFSB, хотя это явно неверно, поэтому, возможно, @EJB не лучшая поддержка моего утверждения: -)).

4 голосов
/ 28 апреля 2010
Is it safe to cache EJB Home lookup result ?
What will happen if one my cluster node is no more working ? 

ИМХО, целью ServiceLocator в J2EE является кэширование EJB Home и сокращение дорогостоящих поисков JNDI. Это безопасно в Weblogic, так как по умолчанию EJB Home сбалансирован по нагрузке в кластере, и это автоматически разрешит переход на другой сервер.

Это значение контролируется значением home-is-clusterable в weblogic-ejb-jar.xml, задокументированным здесь , по умолчанию true.

What will happen if I install a new version of the EJB without refreshing 
the service locator's cache ?

Я сам не пытался сделать такое изменение. Тем не менее, я предполагаю, что в рамках вашей сборки / развертывания ваш класс Service Locator также будет перераспределен вместе с изменением ваших EJB-компонентов - и, таким образом, будет выполнен новый поиск?

Если на ваш клиент не влияют изменения EJB-компонента, то кэшированный EJBHome вернет устаревшую ссылку, когда вы вызовете для него метод. Так что вам придется принудительно обновлять клиента.

0 голосов
/ 28 апреля 2010

Что будет, если я установлю новый версия EJB без обновления кеш сервисного локатора?

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

...