Cette règle signale les classes qui sont annotées à la fois avec @Specializes et @Alternative .
Si la classe est référencée par une classe d'un autre module, la classe n'est pas injectée dans l'autre module sauf si elle est listée dans <alternatives> dans le META-INF/beans.xml de l'autre module.
Dans l'exemple suivant, la classe AltClass3 figure dans le fichier jar2/META-INF/beans.xml dans <alternatives> dans <alternatives>. La classe n'est pas répertoriée dans <alternatives> dans le fichier jar1/META-INF/beans.xml.
WEB-INF/lib/jar1: Class1 {
@Inject @SomeQualifer String foo;
}
WEB-INF/lib/jar2: Class2 { @Produces @SomeQualifer Chaîne doFoo() { ... } }
@Alternative @Specialise AltClass3 étend Class2 { @Produces @SomeQualifer Chaîne doFoo() { ... } }
Dans l'implémentation Contexts and Dependency Injection (CDI) 1.0, Class2 est injectée et utilisée comme producteur pour
Class1.foo.
Dans l'implémentation CDI 1.2, Class2 n'est pas injectée et l'application ne démarre pas, en déclarant qu'aucun producteur n'a
été trouvé pour Class1.foo.
Vous pouvez résoudre ce problème de deux manières :
@Specializes de AltClass3.AltClass3 dans le <alternatives> du fichier jar1/META-INF/beans.xml dans le fichierPour plus d'informations sur l'implémentation Java Platform, Enterprise Edition (Java EE) 7 CDI 1.2, voir Changements de comportement dans Contexts and Dependency Injection 1.2.