Также обратите внимание, что если вы не выполняете федерацию JNDI, вы обычно не можете легко внедрить удаленные EJB-компоненты.

я есть вопрос, связанный с возможной проблемой производительности при использовании аннотации @EJB. Представьте себе следующий сценарий

public class MyBean1 implements MyBean1Remote{
 @EJB
 private MyBean2Remote myBean2;
 @EJB
 private MyBean2Remote myBean3;
 ...
 @EJB
 private MyBean20Remote myBean20;
}  

Существует bean-компонент с множеством зависимостей от других bean-компонентов. В соответствии со спецификацией EJB, если я хочу внедрить MyBean1Remote в какой-либо другой компонент, контейнер должен будет взять все необходимые зависимости из своего пула, вставить его в MyBean1Remote и затем вставить ссылку на заглушку MyBean1Remote.

поэтому в следующем сценарии контейнер должен зарезервировать 20 ejbs (myBean1 и его 19 зависимостей)

public class MyAnotherBean implement MyAnotherRemote{
  @EJB
  private MyBean1Remote myBean1
}

Допустим, в большинстве случаев мы будем использовать только одну зависимость для каждого бизнес-метода myBean1. В результате каждый раз, когда мы хотим внедрить этот компонент, мы заставляем контейнер резервировать множество ненужных EJB-компонентов. Предположим также, что мы работаем с удаленными bean-компонентами, поэтому, вероятно, контейнеру также потребуется выполнить некоторый алгоритм балансировки нагрузки перед внедрением зависимых bean-компонентов.

Вопросов:

Не приведет ли это к ненужному резервированию ресурсов и более к проблеме производительности при работе в кластерной среде?

Может быть, старый добрый ServiceLocator мог бы стать лучшим решением, потому что при таком подходе мы будем запрашивать конкретный EJB, когда он нам действительно нужен?

Ответы на вопрос(1)

Ваш ответ на вопрос