Olá!
Alguém aqui no fórum já utilizou DAO genérico com CDI?
Estou tendo problemas para injetar a implementação correta do DAO no serviço genérico em tempo de execução.
Estou tentando injetar a implementação do DAO genérico com @inject porém, como eu tenho mais de uma implementação do DAO, o servidor não sabe qual implementção injetar.
Ex:
@Named
public abstract class GenericService<T, K> implements IGenericService<T, K>, Serializable {
@Inject
// @GenericDaoJPA
private IGenericDAO<T, K> genericDAO;
// ...
}
Tentei criar um Qualifier (@Qualifier) para marcar o Dao Genérico e tentar injetá-lo, beleza, mas o problema é que no DAO genérico eu não tenho o tipo parametrizado da entidade que vai ser manipulada (Persistida, Consultada etc). Aí dá o erro “java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType” na hora de atrinuir o entityClass.
Implementação genérica do DAO:
@Named
// @GenericDaoJPA
public class GenericDAO<T, K> implements IGenericDAO<T, K>, Serializable {
protected Class<T> entityClass;
@Inject
protected EntityManager entityManager;
@SuppressWarnings("unchecked")
public GenericDAO(){
ParameterizedType genericSuperClass = ( ParameterizedType ) getClass().getGenericSuperclass();
// ClassCastException aqui!
this.entityClass = (Class<T>) genericSuperClass.getActualTypeArguments()[0];
}
// ...
}
Alguém tem alguma solução / sugestão?
Obrigado.