2012-06-06 6 views
3

Возможно, слишком много часов расчесывания через CDI 1.0 specification, но я не смог найти подробное описание того, где именно требуется META-INF/beans.xml.Для инъекций CDI мне нужен META-INF/beans.xml в архиве производителя И в архиве инъекций?

(The section on bean discovery делает несколько интригующих заявлений, которые подразумевают определенные вещи, но я не уверен, если это предписывающее.)

Я понимаю, что грубо говоря любой архив боба нуждается.

Но рассмотрит случай со следующими баночками в совместимом CDI 1.0 среды:

  • интерфейса баночка, содержащие интерфейсы только
  • баночка реализации содержащих CDI боб, которые реализуют эти интерфейсы, и что функция @Inject точки впрыска, но не методы производства
  • A производитель jar, содержащий (для простоты) один объект Java w с единственным методом, который был аннотирован @Produces.

Представляется логичным, что и производителя банке и банка реализации бы должны быть боб архивами, и поэтому, следовательно, будет каждая потребность META-INF/beans.xml ресурсов, содержащихся в них.

Но для полноты, это действительно так? Поскольку в блоке ввода используется только точка @Inject и нет аннотаций CDI, будет ли она проверяться другими способами? Другим способ посмотреть на него: в этом примере, баночка реализации используется только в качестве целевой для инъекций, не источника из инъекционных. Поэтому я мог видеть какую-то логику, которая могла бы сказать: посмотрите, только баночки, которые производят бобы, которые могут быть введены . должны быть объявлены как бин-архивы. (Я не говорю, что это правда, просто я мог видеть, что этот аргумент был сделан.)

Наконец, есть проблема с галькой интерфейса . По определению он не содержит бобы, но я давно видел случаи с GlassFish, где даже интерфейс jar должен был иметь файл META-INF/beans.xml. Это кажется мне неправильным, но я с удивлением обнаружил, что не могу найти раздел в спецификации, чтобы подтвердить или опровергнуть это.

So: beans.xml всюду? Только в баночках для инъекций? Только в камерах для инъекций? Или...?

ответ

2

а.) Вам нужен файл маркера beans.xml в обоих производителей и осущ баночке

б.) Вам не нужен файл маркера beans.xml на чисто интерфейсными банки. Если GlassFish терпит неудачу, это ошибка gf. Однако это не приносит никакого вреда.