Questa regola contrassegna le classi annotate con le annotazioni @Specializes e @Alternative.
Se la classe è referenziata da una classe di un altro modulo, la classe non è iniettata nell'altro modulo a meno che non sia elencata in <alternative> nel META-INF/beans.xml dell'altro modulo.
Nell'esempio seguente, la classe AltClass3 è elencata nel file jar2/META-INF/beans.xml</codice> in <alternatives>. La classe non è elencata in <alternatives> 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 nella sezione <alternative> del file jar1/META-INF/beans.xml nel filePer ulteriori informazioni sull'implementazione di Java EE (Java Platform, Enterprise Edition) 7 CDI 1.2, vedere Contexts and Dependency Injection 1.2 behavior changes.