Olá.Tudo bem?
estou tendo problemas ao usar CDI em minha aplicação.
Em minha aplicação tenho um managedBean, nele é injetado um EJB stateless de classe de negócio.
Esse ejb por sua vez possui como dependência outro ejb stateless, servindo de dao, o qual possui o EntityManager.
O problema é que no managedBean o ejb de serviço é instanciado, porém na classe de serviço o ejb do dao não, ficando como null.
Alguém já passou por esse tipo de coisa poderia me ajudar?
OBS: Percebi que se colocar na classe de serviço a anotação @EJB, a qual não é do CDI o objeto DAO é instanciado.
Vou passar as classes para entenderem o problema.
ManagedBean
@ManagedBean
@ViewScoped
public class CategoriaBean implements Serializable{
private static final long serialVersionUID = -1514602559760951476L;
private Categoria categoria;
private List<Tipocategoria> listaTipoCategoria = null;
private int valorTipoCategoria;
@Inject
private CategoriaService categoriaService;
public String save(){
categoria.setTipoCategoria(Tipocategoria.valueOf(categoria.getValorTipoCategoria()));
categoria.setId(null);
categoriaService.save(categoria);
//categoriaDAO.save(categoria);
FacesContext context = FacesContext.getCurrentInstance();
String mensagem = "";
try {
ResourceBundle bundle = ResourceBundle.getBundle("messages", context.getViewRoot().getLocale());
mensagem = bundle.getString("sucesso.label");
} catch (Exception e) {
System.out.println("EXCEPTION: " + e);
}
FacesContext.getCurrentInstance().addMessage("", new FacesMessage(FacesMessage.SEVERITY_INFO,mensagem,mensagem));
preparaBean();
return null;
}
}
EJB de serviço
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class CategoriaServiceImpl implements CategoriaService,Serializable {
/**
*
*/
private static final long serialVersionUID = -311290272957953479L;
@Inject
private transient CategoriaDAO categoriaDAO;
/**
* @return the categoriaDAO
*/
public CategoriaDAO getCategoriaDAO() {
return categoriaDAO;
}
/**
* @param categoriaDAO the categoriaDAO to set
*/
public void setCategoriaDAO(CategoriaDAO categoriaDAO) {
this.categoriaDAO = categoriaDAO;
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void save(Categoria categoria){
categoriaDAO.save(categoria);
}
}
EJB com o entityManager DAO
/**
*
*/
package br.com.learningjsf.dao;
import java.io.Serializable;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import br.com.learningjsf.entity.Categoria;
/**
* @author leandro
*
*/
@Stateless
public class CategoriaDAOImpl implements CategoriaDAO,Serializable{
/**
*
*/
private static final long serialVersionUID = -3905074532334294052L;
@PersistenceContext
private EntityManager entityManager;
/**
* @return the entityManager
*/
public EntityManager getEntityManager() {
return entityManager;
}
/**
* @param entityManager the entityManager to set
*/
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
public void save(Categoria categoria) {
entityManager.persist(categoria);
}
}