Prezados colegas, preciso de ajuda para integrar em uma aplicação web com JSF e EJB 3 os componentesseguintes:
ManagedBean --> Facade --> DAO.
Consegui injetar o DAO diretamente no ManagedBean, o problema é que quando coloquei o Facade na história não consigo fazer funcionar.
Do ManagedBean preciso chamar um método do Facade e do Facade, um método da DAO. Tentei injetar a DAO na Facade e a Facade no ManagedBean, mas o objeto injetado aparece como nulo.
Criei um DAOFactory e injetei no Facade. É possivel injetar o Facade no managedBean?
Estou começando agora a utilizar EJB com JSF e preciso de ajuda. Agradeço se puderem ajudar.
Vou postar a seguir meus componentes ManagedBean, DAOFactory, facade e DAO.
Obrigado
[b]DAOFactoryImpl[/b]
@Stateless
public class DAOFactoryImpl implements DAOFactory {
@PersistenceContext(unitName = "Exemplo001PU")
private EntityManager entityManager;
@Override
public DepartamentoDaoImpl getDepartamentoDao() {
DepartamentoDaoImpl dao = new DepartamentoDaoImpl();
dao.setEntityManager(entityManager);
return dao;
}
}
[b]DepartamentoDaoImpl [/b]
//@Stateless
public class DepartamentoDaoImpl implements DepartamentoDao {
//@PersistenceContext(unitName = "Exemplo001PU")
private EntityManager entityManager;
//private EntityManager entityManager;
public DepartamentoDaoImpl() {
}
@Override
public void create(Departamento a) {
entityManager.persist(a);
}
@Override
public void edit(Departamento entity) {
entityManager.merge(entity);
}
@Override
public void remove(Departamento entity) {
entityManager.remove(entityManager.merge(entity));
}
@Override
public Departamento find(Object id) {
return entityManager.find(Departamento.class, id);
}
@Override
public List<Departamento> buscaTodos() {
CriteriaQuery cq = entityManager.getCriteriaBuilder().createQuery();
cq.select(cq.from(Departamento.class));
return entityManager.createQuery(cq).getResultList();
}
@Override
public List<Departamento> buscarFaixa(int[] faixa) {
CriteriaQuery cq = entityManager.getCriteriaBuilder().createQuery();
cq.select(cq.from(Departamento.class));
Query q = entityManager.createQuery(cq);
q.setMaxResults(faixa[1] - faixa[0]);
q.setFirstResult(faixa[0]);
return q.getResultList();
}
@Override
public int contar() {
CriteriaQuery cq = entityManager.getCriteriaBuilder().createQuery();
Root<Departamento> rt = cq.from(Departamento.class);
cq.select(entityManager.getCriteriaBuilder().count(rt));
Query q = entityManager.createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
}
public void setEntityManager(EntityManager entityManager) {
this.entityManager=entityManager;
}
}
[b]DepartamentoFacadeImpl[/b]
@Stateless
public class DepartamentoFacadeImpl implements DepartamentoFacade {
@EJB
private DAOFactory daoFactory;
private DepartamentoDao departamentoDao;
public DepartamentoFacadeImpl() {
departamentoDao = daoFactory.getDepartamentoDao();
}
@Override
public void create(Departamento a) {
departamentoDao.create(a);
}
@Override
public void remove(Departamento entity) {
departamentoDao.remove(entity);
}
@Override
public Departamento find(Object id) {
return departamentoDao.find(id);
}
@Override
public List<Departamento> buscaTodos() {
return departamentoDao.buscaTodos();
}
@Override
public List<Departamento> buscarFaixa(int[] faixa) {
return departamentoDao.buscarFaixa(faixa);
}
@Override
public int contar() {
return departamentoDao.contar();
}
@Override
public void edit(Departamento entity) {
departamentoDao.edit(entity);
}
}
[b]DepartamentoMBean[/b]
@ManagedBean(name = "departamentoMBean")
@SessionScoped
public class DepartamentoMBean {
private Departamento corrente;
private DataModel itens = null;
//@EJB
//private dao.DepartamentoDao ejbFacade;
@EJB
private dao.factory.DAOFactoryImpl daoFactory;
private DepartamentoDaoImpl ejbFacade = daoFactory.getDepartamentoDao();
//private DepartamentoFacadeImpl ejbFacade=new DepartamentoFacadeImpl();
private PaginationHelper pagination;
private int indiceItemSelecionado;
public DepartamentoMBean() {
}
public DepartamentoDaoImpl getEjbFacade() {
return ejbFacade;
}
public Departamento getSelecionado() {
if (corrente == null) {
corrente = new Departamento();
indiceItemSelecionado = -1;
}
return corrente;
}
// deixar
public String salvar() {
try {
ejbFacade.create(corrente);
JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/propriedades.recursos.propriedades").getString("departamentoCriado"));
corrente = new Departamento();
indiceItemSelecionado = -1;
return "Criar";
} catch (Exception e) {
JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/propriedades.recursos.propriedades").getString("erroPersistenciaOcorrido"));
return null;
}
}
public String atualizar() {
try {
ejbFacade.edit(corrente);
JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/propriedades.recursos.propriedades").getString("departamentoAtualizado"));
return "Ver";
} catch (Exception e) {
JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/propriedades.recursos.propriedades").getString("erroPersistenciaOcorrido"));
return null;
}
}
public PaginationHelper getPaginacao() {
if (pagination == null) {
pagination = new PaginationHelper(10) {
@Override
public int getContarItens() {
return ejbFacade.contar();
}
@Override
public DataModel criarPageDataModel() {
int vetor[] = new int[]{getPrimeiroItemPagina(), getPrimeiroItemPagina() + getTamanhoPagina()};
List lista = ejbFacade.buscarFaixa(vetor);
ListDataModel lstDataModel = new ListDataModel(lista);
return lstDataModel;
}
};
}
return pagination;
}
public DataModel getItens() {
if (itens == null) {
itens = getPaginacao().criarPageDataModel();
}
return itens;
}
public String proximo() {
getPaginacao().proximaPagina();
itens = null;
return "Listar";
}
public String anterior() {
getPaginacao().paginaAnterior();
itens = null;
return "Listar";
}
public String ver() {
corrente = (Departamento) getItens().getRowData();
indiceItemSelecionado = pagination.getPrimeiroItemPagina() + getItens().getRowIndex();
return "Ver";
}
public String editar() {
corrente = (Departamento) getItens().getRowData();
indiceItemSelecionado = pagination.getPrimeiroItemPagina() + getItens().getRowIndex();
return "Editar";
}
public String remover() {
corrente = (Departamento) getItens().getRowData();
indiceItemSelecionado = pagination.getPrimeiroItemPagina() + getItens().getRowIndex();
acaoExcluir();
itens = null;
return "Listar";
}
public String criar() {
corrente = new Departamento();
indiceItemSelecionado = -1;
return "Criar";
}
public String listar() {
itens = null;
return "Listar";
}
public String excluirVer() {
acaoExcluir();
itens = null;
return "Listar";
}
private void acaoExcluir() {
try {
ejbFacade.remove(corrente);
JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/propriedades.recursos.propriedades").getString("departamentoDeletedado"));
} catch (Exception e) {
JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/propriedades.recursos.propriedades").getString("erroPersistenciaOcorrido"));
}
}
public List getItensDisponiveis() {
return ejbFacade.buscaTodos();
}
}