У меня есть вопрос, связанный с возможной проблемой производительности при использовании аннотации @EJB. Представьте себе следующий сценарий
public class MyBean1 implements MyBean1Remote{
@EJB
private MyBean2Remote myBean2;
@EJB
private MyBean2Remote myBean3;
...
@EJB
private MyBean20Remote myBean20;
}
Существует компонент с большим количеством зависимостей от других компонентов. Согласно спецификации EJB, если я хотел бы внедрить MyBean1Remote в какой-либо другой компонент, контейнер должен был бы взять все необходимые зависимости из своего пула, вставить его в MyBean1Remote и затем вставить ссылку на заглушку MyBean1Remote.
, поэтому в следующем сценарии контейнер должен зарезервировать 20 ejbs (myBean1 и его 19 зависимостей)
public class MyAnotherBean implement MyAnotherRemote{
@EJB
private MyBean1Remote myBean1
}
Допустим, в большинстве случаев мы будем использовать только одну зависимость для каждого бизнес-метода myBean1. В результате каждый раз, когда мы хотим внедрить этот компонент, мы заставляем контейнер резервировать множество ненужных EJB-компонентов. Предположим также, что мы работаем с удаленными bean-компонентами, поэтому, вероятно, контейнеру также потребуется выполнить некоторый алгоритм балансировки нагрузки перед внедрением зависимых bean-компонентов.
Вопросы:
Не приведет ли это к ненужному резервированию ресурсов и более к проблеме производительности при работе в кластерной среде?
Может быть, старый добрый ServiceLocator может быть лучшим решением, потому что при таком подходе мы будем запрашивать конкретный EJB, когда он нам действительно понадобится?