Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Diferença entre alternative e specialises

Estou tentando entender a diferença entre alternative e specialises mas eles me parecem fazer exatamente a mesma coisa, a unica diferença que encontrei ao que me parece é que specialized usa herança .

1 resposta
solução!

Fala aí Alexandre, blz?

O @Specializes é justamente para uso de herança, quando você quer criar uma especialização de algum bean já existente.

Já o @Alternative é sempre uma alternativa para um bean. Vamos exemplificar o @Alternative com um `EntityManager.

Você em seu projeto criou um produtor de EntityManager que acessa o banco de produção.

Porém quando você está em desenvolvimento você não quer que esse EntityManager que acessa o banco de produção seja injetado. Você poderia usar um outro produtor de EntityManger que acessa um banco de dados local ou de desenvolvimento. Anota esse produtor com @Alternative e habilita ele no beans.xml.

Dessa forma ao rodar em desenvolvimento sempre será injetado uma alternativa para o EntityManager ao invés de injetar o que se conecta ao banco de produção.

Um uso bem comum para @Alternative é para evolução de uma classe especifica. Vamos supor que você está em um sistema legado, e precisa fazer uma alteração grande em uma determinada classe e essa classe implementa uma interface.

Você pode criar outra classe que implemente essa interface e anota-la com @Alternative e habilita-la (via bean.xml ou @Priority). Fazendo isso você deixará de utilizar a versão antiga da classe e passará a utlizar a versão nova (a alternativa).

Espero ter ajudado!