Le classi che utilizzano sia annotazioni Specializes e Alternative non vengono inserite in altri moduli

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:

Per ulteriori informazioni sull'implementazione di Java EE (Java Platform, Enterprise Edition) 7 CDI 1.2, vedere Contexts and Dependency Injection 1.2 behavior changes.