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, elle n'est pas injectée dans l'autre module à moins d'être répertoriée
comme <alternative> dans le fichier META-INF/beans.xml de l'autre module.
Dans l'exemple suivant, la classe AltClass3 est répertoriée dans le fichier jar2/META-INF/beans.xml comme <alternative>. La classe n'est pas répertoriée en tant qu'<alternative> 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 en tant qu'<alternative> dans le fichier jar1/META-INF/beans.xml.Pour 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 d'une édition à l'autre.