Кэширование поиска JNDI

#java #ejb #jndi

#java #ejb #jndi

Вопрос:

Рекомендуемый способ вызова метода локального интерфейса EJB — выполнить поиск:

 <code>
Context ic = new IntialContext(); 
ic.lookup(objectJndiName);
</code>
  

Тем не менее, я просматриваю полное дерево JNDI в начале приложения, и в конце я могу создать карту всех объектов с:

 <code> 
   Map <String,Object> 
</code>
  

с ключевым именем объекта и объектом требуемой реализации интерфейса. Я ищу объект с помощью ключа и вызываю требуемый метод в интерфейсе следующим образом:

 method.invoke(bean, args);
  

Подходит ли этот метод? или я должен выполнять поиск требуемого ejb каждый раз?

Комментарии:

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

2. Мне не нужно отслеживать изменения в объекте impl, поскольку реализации представляют собой сеансовые компоненты без состояния с методами, не требующими какого-либо состояния.

3. Я ничего не говорил об изменениях в объектах impl. Я только что сказал об изменениях. Не спешите с выводами. Там может быть изменено то, что связано. В этом все еще нет смысла. Так что не делайте этого.

Ответ №1:

Поиск JNDI не является рекомендуемым способом для создания экземпляров ссылок на локальные интерфейсы компонентов без состояния, начиная с EE5 и выше. Простое внедрение компонента с помощью аннотации @EJB или CDI @Inject отлично справится с этой задачей.

Комментарии:

1. Это проблема с устаревшим кодом. Использование аннотаций в текущем сценарии не предусмотрено. Существующий код содержит жестко запрограммированные соглашения об именовании для разрешения классов impl. Это первый шаг. следующим шагом, естественно, является активация EJB и внедрение аннотаций. Видите ли вы какие-либо проблемы с безопасностью потоков?

2. Извините, но вы упомянули локальный интерфейс. Я думаю, что в EJB 2.x были домашние и удаленные интерфейсы, а не локальные. Я не использовал их с давних пор, и я могу только вспомнить использование шаблона EE ‘Service Locator’, в котором ссылки, полученные JNDI, кэшируются внутри одноэлементного класса.

3. Локальные интерфейсы были введены в спецификации EJB 2.1