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 è 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:

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