Olá galera,
Estou criando um projeto utilizando maven, cdi (weld) e jsf.
Tenho os seguintes modulos de projeto criados pelo maven :
interfaces
impl (a implementação default das interfaces)
web
ear
Estou com uma dificuldade enorme em utilizar o CDI na injeção de dependência dentro do meu módulo web.
Basicamente tenho uma interface CampanhaBusiness no módulo interfaces :
public interface CampanhaBusiness {
public List<Campanha> listAll();
}
Tenho uma implementação dessa interface no módulo impl :
@Named("campanhaBusiness")
@BusinessImp
public class CampanhaBusinessImpl implements CampanhaBusiness {
@Override
public List<Campanha> listAll() {
final List<Campanha> list = new ArrayList<Campanha>();
final Campanha a1 = new CampanhaImpl();
a1.setId(1l);
a1.setName("Campanha 1");
list.add(a1);
final Campanha a2 = new CampanhaImpl();
a2.setId(2l);
a2.setName("Campanha 2");
list.add(a2);
return list;
}
}
E tenho “injeta-la” no meu controller no módulo web :
package br.com.exp.light.controller;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.enterprise.inject.Model;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
import br.com.exp.light.interfaces.annotations.BusinessImp;
import br.com.exp.light.interfaces.business.CampanhaBusiness;
import br.com.exp.light.interfaces.entity.Campanha;
@Model
public class CampanhaController {
private final String titulo = "Campanhas";
@Inject
@BusinessImp
private CampanhaBusiness campanhaBusiness;
private List<Campanha> campanhaList;
public String getTitulo() {
return titulo;
}
@Produces
@Named
public List<Campanha> getCampanhaList() {
System.out.println("Inicializando getCampanhaList");
return campanhaList;
}
@PostConstruct
public void retrieveAllMembersOrderedByName() {
System.out.println("Inicializando retrieveAllMembersOrderedByName");
campanhaList = campanhaBusiness.listAll();
System.out.println("campanhaList size is " + campanhaList.size());
}
}
Porém sempre recebo um NullPointer nesta parte do código onde tenta acessar o valor “injetado”.
Todos os módules tem o beans.xml dentro da pasta META-INF do resources.
Anexo está o projeto bem simples e leve feito em maven.
Agredeço muito a ajuda