Questa regola contrassegna le classi annotate con le annotazioni @Specializes e @Alternative.
Se la classe è indicata da una classe di un altro modulo, la classe non è inserita nell'altro modulo a meno che non sia elencata come <alternative> nel file META-INF/beans.xml dell'altro modulo.
Nel seguente esempio, la classe AltClass3 viene elencata nel file jar2/META-INF/beans.xml come <alternative>. La classe non viene elencata come <alternative> nel file jar1/META-INF/beans.xml.
WEB-INF/lib/jar1: Class1 {
@Inject @SomeQualifer String foo;
}
WEB-INF/lib/jar2: Class2 { @Produces @SomeQualifer String doFoo() { ... } }
@Alternative @Specializes AltClass3 estende Class2 { @Produces @SomeQualifer String doFoo() { ... } }
Nell'implementazione di CDI (Contexts and Dependency Injection) 1.0, Class2 viene inserito ed utilizzato come produttore per Class1.foo.
Nell'implementazione di CDI 1.2, Class2 non viene inserito nell'applicazione e non parte, informando l'utente che non è possibile trovare un produttore per Class1.foo.
È possibile risolvere questo problema in due modi:
@Specializes da AltClass3AltClass3 come <alternative> nel file jar1/META-INF/beans.xmlPer ulteriori informazioni sull'implementazione di Java EE (Java Platform, Enterprise Edition) 7 CDI 1.2, consultare Contexts and Dependency Injection 1.2 behavior changes.