Можно ли внедрить список bean-компонентов, реализующих интерфейс с использованием Java EE? - PullRequest
2 голосов
/ 09 марта 2010

Интересно, смогу ли я добавить список (не сохраняющих состояние) бинов, которые все реализуют специальный интерфейс.

Например, у меня есть контракт модуля

public interface ResetService {
  void reset(MyContext context);
}

Чем у меня есть два модуля, которые реализуют этот интерфейс. И один модуль, который должен вызывать все реализации:

@EJBs
private List<ResetService> resetServices;

void resetAllModules(MyContext context) {
  for (ResetService resetService : resetServices)
    resetService.reset(context);
}

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

Я думаю, это невозможно, или?

Ответы [ 3 ]

3 голосов
/ 13 января 2014

Первоначальный ответ неверен. Вы можете вводить динамически, используя аннотацию @Any и класс javax.enterprise.inject.Instance. Вот простой пример http://coders -kitchen.com / 2013/01/24 / jee-и-динамическая-зависимость-инъекция /

3 голосов
/ 08 сентября 2015

Вы можете получить все бобы типа:

    @Inject
    BeanManager beanManager;

    public Set<ResetService> getAllResetServices() {
       return beanManager.getBeans(ResetService.class);
    }
2 голосов
/ 11 марта 2010

Не возможно с аннотациями. Лучшим вариантом здесь является цикл по массиву имен JNDI 1 и поиск JNDI для каждого из них, чтобы кормить ваш List. На всякий случай, возможно, посмотрите на предыдущие вопросы, например на этот , если вы хотите попытаться сделать вещи более динамичными (я не уверен, что это будет хорошей идеей).

...