Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

CDI Não instancia classe

Bom dia a todos. Estou tendo um problema com o CDI. Tenho uma aplicação rest e quando faço uma requisição a um recurso, na classe que tem PATH eu consigo usar o CDI, mas se eu chamar uma outra classe (um DAO por exemplo), não consigo instanciar nenhum objeto através do CDI. EX:

@Path("/cadastro/produto")
public class CadastroProduto {


    //Aqui o CDI instancia a classe. 
    @Inject
    private User user;//Objeto apenas para teste

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response cadastrarProduto(Produto produto){
        try {
            URI uri = URI.create("/cadastro/produto/"+produto.getCodigo());            
            produto = new DAOTeste<>(Produto.class).adiciona(produto);        

            return Response.created(uri).build();
        } catch (ErroCadastrarProdutoException e) {
            return Response.status(500).build();
        }
    }

mas se eu tentar instancia alguma classe dento do DAO, não funciona

public class DAO<T> {

    //Dentro da classe DAO não consegue instanciar
    @Inject
    private User user;

}

Alguém já passou por isso.

2 respostas

Como você está instanciando a classe DAO? Se estiver fazendo new DAO<T>() o CDI não age e, portanto, não consegue instanciar as dependências.

Para que o CDI consiga gerar a classe corretamente, ele tem que participar do processo desde o começo. Se você injetar o próprio DAO, ele vai conseguir injetar o User.

solução!

entendi marcos....eu estou usando new DAO porque não consigo injetar com CDI um dao genérico...tem um artigo da Caelum sobre isso mas não consegui implementar...vlw pela resposta

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software