У меня есть ejb-JAR, состоящий из нескольких классов, подсчитывающих разные значения [Counter1, Counter2, ...], и все они реализуют один и тот же интерфейс [ICountable].Также частью этого JAR является класс, зацикливающийся на всех существующих счетчиках и возвращающий его значения [CounterCollector].
Теперь у меня есть два других WAR с EJB, упакованными в него.
Мое намерение состоит в том, чтобыиметь первую WAR только с использованием Counter1 и Counter3.Другая WAR с использованием Counter1 и Counter2.(Реальный сценарий немного сложнее, но я думаю, что достаточно информации, чтобы понять идею)
Я хотел бы использовать @ Alternative-Annotation на всех счетчиках и добавлять только включенные альтернативы в CounterCollector следующим образом:
...
@Inject
private Instance<ICountable> counters;
public List<Integer> getCounts()
{
List<Integer> c = new ArrayList<>();
for (ICountable countable : counters) {
c.add(countable.count());
}
return c;
}
...
В WAR1 я активирую счетчики 1 и 3 в файле beans.xml:
<alternatives>
<class>Counter1</class>
<class>Counter3</class>
</alternatives>
во втором файле WAR.ans.xml:
<alternatives>
<class>Counter1</class>
<class>Counter2</class>
</alternatives>
AsПока реализации ICounter НЕ аннотированы как @Alternative, все работает как положено (кроме того, что, очевидно, все счетчики являются триггерами).
Как только я аннотирую ICounters с помощью @Alternative, они вообще не вводятся.Независимо от того, включены ли они с помощью beans.xml.
Разве невозможно внедрить @ Alternative-Annotated классы в javax.enterprise.inject.Instance?
Использую ли я @Alternativeв некотором смысле это не работа, или я что-то упустил?