Diese Regel markiert Klassen, die mit den Annotationen @Specializes und @Alternative annotiert sind.
Wenn die Klasse von einer Klasse in einem anderen Modul referenziert wird, wird die Klasse nicht in das andere Modul eingefügt,
sofern sie nicht in the Datei META-INF/beans.xml des anderen Moduls als <alternative> aufgelistet ist.
Im folgenden Beispiel ist die Klasse AltClass3 in der Datei jar2/META-INF/beans.xml als
<alternative> aufgelistet. Die Klasse ist in der Datei jar1/META-INF/beans.xml nicht als <alternative> aufgelistet.
WEB-INF/lib/jar1: Class1 {
@Inject @SomeQualifer String foo;
}
WEB-INF/lib/jar2: Class2 { @Produces @SomeQualifer Zeichenfolge doFoo() { ... } }
@Alternative @Specializes AltClass3 extends Class2 { @Produces @SomeQualifer String doFoo() { ... } }
In der Contexts and Dependency Injection (CDI) 1.0-Implementierung wird Class2 eingefügt und als Producer Class1.foo verwendet.
In der CDI 1.2-Implementierung wird Class2 nicht eingefügt und die Anwendung wird mit dem Hinweis, dass kein Producer für Class1.foo gefunden wurde, nicht gestartet.
Sie können dieses Problem auf zwei Arten beheben:
@Specializes aus AltClass3 entfernenAltClass3 als <alternative> in der Datei jar1/META-INF/beans.xml deklarierenWeitere Informationen zur CDI 1.2-Implementierung von Java EE 7 (Java Platform, Enterprise Edition) finden Sie unter Contexts and Dependency Injection 1.2 behavior changes.