Caros colegas,
Estou tentando tornar meu managed bean um EJB. Para isso injetei o EntityManager no managed bean. As opções para consulta e listagem funcionaram, entretanto, nas demais operações como em.persist(corrente) ou em.merge(corrente) retorna uma exceção do tipo TransactionRequiredException.
Vocêm podem dar uma olhada no código. Não consegui achar o erro. Postei o código abaixo.
Obrigado.
package mBean;
import bean.Departamento;
import util.JsfUtil;
import util.PaginationHelper;
import java.util.List;
import java.util.ResourceBundle;
import javax.ejb.Stateless;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
@Stateless
@Named
@ManagedBean(name = "departamentoMBean")
@SessionScoped
public class DepartamentoMBean {
@PersistenceContext(unitName = "Exemplo001PU")
@Inject
EntityManager em;
private Departamento corrente;
private DataModel itens = null;
private DataModel itensSelecionados = null;
private PaginationHelper pagination;
private int indiceItemSelecionado;
public DepartamentoMBean() {
}
public EntityManager getEntityManager() {
return em;
}
public Departamento getSelecionado() {
if (corrente == null) {
corrente = new Departamento();
indiceItemSelecionado = -1;
}
return corrente;
}
public String salvar() {
try {
em.persist(corrente);
JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/propriedades.recursos.propriedades").getString("departamentoCriado"));
corrente = new Departamento();
indiceItemSelecionado = -1;
return "Criar";
} catch (Exception e) {
System.out.println(e.getMessage());
String m = e.getMessage();
JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/propriedades.recursos.propriedades").getString("erroPersistenciaOcorrido"));
return null;
}
}
public String atualizar() {
try {
em.merge(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() {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
Root rt = cq.from(Departamento.class);
cq.select(em.getCriteriaBuilder().count(rt));
Query q = em.createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
}
@Override
public DataModel criarPageDataModel() {
int vetor[] = new int[]{getPrimeiroItemPagina(), getPrimeiroItemPagina() + getTamanhoPagina()};
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
cq.select(cq.from(Departamento.class));
Query q = em.createQuery(cq);
q.setMaxResults(vetor[1] - vetor[0]);
q.setFirstResult(vetor[0]);
List lista = q.getResultList();
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 entrarConsulta() {
corrente = new Departamento();
indiceItemSelecionado = -1;
return "Consultar";
}
public String consultar() {
itensSelecionados = null;
return "ListarSelecionados";
}
public DataModel getItensSelecionados() {
if (itensSelecionados == null) {
Query query = em.createNamedQuery("Departamento.findByParteNomDep");
query.setParameter("nomDep", "%" + corrente.getNomDep() + "%");
List lista = query.getResultList();
itensSelecionados = new ListDataModel(lista);
}
return itensSelecionados;
}
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 {
em.remove(em.merge(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() {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
cq.select(cq.from(Departamento.class));
return em.createQuery(cq).getResultList();
}
}