Classes que usam ambas as anotações Specializes e Alternative não são injetadas em outros módulos

Esta regra sinaliza classes que são anotadas com ambas as anotações @Specializes e @Alternative. Se a classe for referenciada por uma classe a partir de outro módulo, a classe não será injetada no outro módulo a menos que seja listada como uma <alternative> no META-INF/beans.xml do outro módulo.

No exemplo a seguir, a classe AltClass3 é listada no arquivo jar2/META-INF/beans.xml como uma <alternative>. A classe não está listada como uma <alternative> no arquivo jar1/META-INF/beans.xml.


WEB-INF/lib/jar1: Class1 {
    @Inject @SomeQualifer String foo;
  }
 
WEB-INF/lib/jar2: Class2 { @Produces @SomeQualifer Sequência doFoo() { ... } }
  @Alternative @Specializes AltClass3 estende Class2 { @Produces @SomeQualifer String doFoo() { ... } } 

Na implementação do Contexts and Dependency Injection (CDI) 1.0, Class2 é injetada e usada como um produtor para Class1.foo. Na implementação do CDI 1.2, Class2 não é injetada e o aplicativo não é iniciado, afirmando que nenhum produtor para Class1.foo pode ser localizado.

É possível resolver o problema de duas maneiras:

Para obter mais informações sobre a implementação do Java Platform, Enterprise Edition (Java EE) 7 CDI 1.2, consulte Mudanças de comportamento do Contexts and Dependency Injection 1.2.