Esta regra sinaliza classes que são anotadas com ambas as anotações @Specializes e @Alternative.
Se a classe for referenciada por uma classe de outro módulo, a classe não será injetada no outro módulo a menos que ela esteja listada em <alternativas> no META-INF/beans.xml do outro módulo.
No exemplo a seguir, a classe AltClass3 está listada no arquivo jar2/META-INF/beans.xml arquivo em <alternatives>. A classe não está listada em <alternativas> 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:
@Specializes de AltClass3AltClass3 no <alternatives> no arquivo jar1/META-INF/beans.xml do arquivoPara obter informações adicionais sobre a implementação da Java Platform, do CDI 1.2 de Enterprise Edition (Java EE) 7, veja Mudanças de comportamento de Contexts and Dependency Injection 1.2.