#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