JSF + EJB + Hibernate

13 respostas
M

E aí galera. To com um problemão, eu acho que é de lógica e até agora não consegui resolver, já faz 4 dias. Procurei em tudo quanto é lugar, implementei um monte de lógicas e nada resolveu. Resolvi postar aqui no forum então, se alguém puder ajudar fico muito grato.

Tenho duas classes categoria e produto. Uma categoria tem muitos produtos. Fiz uma view pra persistir meus produtos, nela há um selectOneMenu com uma lista de SelectItems de categorias. Por nada no mundo isso persiste no banco. Uma hora da mensagem de erro no EJB outra dá erro de conversor, e outras tantas dependendo das varias logicas que tentei implementar.

Essa é o trecho da minha pagina JSF
<h:selectOneMenu value="#{produtocrtl.idCategoria}" >
                    <f:selectItems value="#{categoriacrtl.selectItemCategoria}"/>
                </h:selectOneMenu>
Esse é o codigo que retorna minha lista que preenche meu SelectOneMenu ta no ManageBean do CategoriaCrtl
public List<SelectItem> getSelectItemCategoria(){
        List<SelectItem> lista = new ArrayList<SelectItem>();
        List<Categoria> listaCategoria = getListaCategoria();
        lista.add(new SelectItem(null, ""));
        for(Categoria c : listaCategoria){
            lista.add(new SelectItem(c.getIdCategoria(),c.getDescricao()));
        }
        return lista;
    }
Essa é meu ManageBean ProdutoCrtl(Ta meio bagunçado por que já mexi tanto que virou um caos)
@Named(value="produtocrtl")
@SessionScoped
public class ProdutoCrtl implements Serializable{
    
    @Inject
    private ProdutoDao produtoDao;
    
    @Inject
    private CategoriaDao categoriaDao;
    
    private Produtos produtos; //= new Produtos();   
    private Integer idCategoria;
    
    public Produtos getProduto(){
        if(produtos == null){
            produtos = new Produtos();
        }
        return produtos;
    }
    
    public ProdutoCrtl(){
        System.out.println(">>>>>>>>>>>>>Construtor produto foi chamado");
    
    }
    
    public List getListaProdutos(){
        return produtoDao.findAll();
    }
    /**
     * @return the produtos
     */
    public Produtos getProdutos() {
        System.out.println(">>>>>>>>>>get produtos foi chamado " + produtos.toString());
        return produtos;
    }

    /**
     * @param produtos the produtos to set
     */
    public void setProdutos(Produtos produtos) {
        this.produtos = produtos;
    }
    
    public void addProdutos(){
        System.out.println(">>>>>addProdutos foi chamado" + produtos.getIdProdutos());
        System.out.println(">>>>> " + produtos.toString() + " ### " + produtos.getNome() + " ### " + produtos.getDescricao() + " ### " + this.idCategoria);
        Categoria categoria = categoriaDao.find(idCategoria);
        produtos.setIdCategoria(categoria);
        produtoDao.save(produtos);
        if(produtos.getIdProdutos()>0){
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Novo cliente adicionado com sucesso"));
            produtos.setIdProdutos(null);
            produtos.setIdCategoria(null);
        }else{
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Erro ao adicionar cliente"));
        }
    }
    
    public void excluirProduto(){
        try{
            produtoDao.delete(produtos);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Produto excluido com sucesso"));
        }catch(Exception e){
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Erro ao excluir produto"));
        }
    }

    /**
     * @return the idCategoria
     */
    public Integer getIdCategoria() {
        return idCategoria;
    }

    /**
     * @param idCategoria the idCategoria to set
     */
    public void setIdCategoria(Integer idCategoria) {
        this.idCategoria = idCategoria;
    }
    
    
    
}
Esse é um trecho do meu SessionBean CategoriaDao que busca a categoria por ID, que foi utilizado no metodo addProdutos()
public Categoria find(Integer id) {
        Query query = entityManager.createNamedQuery("Categoria.findByIdCategoria");
        query.setParameter("idCategoria", id);
        Categoria categoria = (Categoria) query.getSingleResult();
        return categoria;
    }
Este é meu SessionBean
@Stateless
public class ProdutoDao {

    @PersistenceContext(name = "ecommercePU")
    private EntityManager entityManager;

    public List findAll() {
        Query query = entityManager.createNamedQuery("Produtos.findAll");
        return query.getResultList();
    }

    public void save(Produtos produto) {
        System.out.println(">>>>>>save produto foi chamado");
        entityManager.persist(produto);
    }

    public void delete(Produtos produto) {
        entityManager.remove(produto);
    }

    public void update(Produtos produto) {
        entityManager.merge(produto);
    }
}
Esse é meu EntityBean Produtos
@Entity
@Table(name = "Produtos")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Produtos.findAll", query = "SELECT p FROM Produtos p"),
    @NamedQuery(name = "Produtos.findByIdProdutos", query = "SELECT p FROM Produtos p WHERE p.idProdutos = :idProdutos"),
    @NamedQuery(name = "Produtos.findByNome", query = "SELECT p FROM Produtos p WHERE p.nome = :nome"),
    @NamedQuery(name = "Produtos.findByPreco", query = "SELECT p FROM Produtos p WHERE p.preco = :preco"),
    @NamedQuery(name = "Produtos.findByCategoria",query = "SELECT p FROM Produtos p WHERE p.idCategoria = :idCategoria")})
public class Produtos implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "idProdutos")
    private Integer idProdutos;
    @Size(max = 100)
    @Column(name = "nome")
    private String nome;
    @Lob
    @Size(max = 65535)
    @Column(name = "descricao")
    private String descricao;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "preco")
    private BigDecimal preco;
    @OneToMany(mappedBy = "idProdutos")
    private List<PedidoItem> pedidoItemList;
    @JoinColumn(name = "idCategoria", referencedColumnName = "idCategoria")
    @ManyToOne
    private Categoria idCategoria;
    
    @Size(max=45)
    @Column(name = "imagem")
    private String imagem;
    
    public Produtos() {
    }

    public Produtos(Integer idProdutos) {
        this.idProdutos = idProdutos;
    }

    public Integer getIdProdutos() {
        return idProdutos;
    }

    public void setIdProdutos(Integer idProdutos) {
        this.idProdutos = idProdutos;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public BigDecimal getPreco() {
        return preco;
    }

    public void setPreco(BigDecimal preco) {
        this.preco = preco;
    }

    @XmlTransient
    public List<PedidoItem> getPedidoItemList() {
        return pedidoItemList;
    }

    public void setPedidoItemList(List<PedidoItem> pedidoItemList) {
        this.pedidoItemList = pedidoItemList;
    }

    public Categoria getIdCategoria() {
        return idCategoria;
    }

    public void setIdCategoria(Categoria idCategoria) {
        this.idCategoria = idCategoria;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idProdutos != null ? idProdutos.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Produtos)) {
            return false;
        }
        Produtos other = (Produtos) object;
        if ((this.idProdutos == null && other.idProdutos != null) || (this.idProdutos != null && !this.idProdutos.equals(other.idProdutos))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.ecommerce.model.Produtos[ idProdutos=" + idProdutos + " ]";
    }

    /**
     * @return the imagem
     */
    public String getImagem() {
        return imagem;
    }

    /**
     * @param imagem the imagem to set
     */
    public void setImagem(String imagem) {
        this.imagem = imagem;
    }
    
}

13 Respostas

nel

Cara,

postou no lugar errado. Tem um seção só para JEE. Sobre o seu caso, está populando o seu combo?
E porque raios tu tem um EJB e injeta o DAO no seu Bean ao invés de fazer isso no seu EJB?

O seu ManagedBean deveria saber que existe somente o seu EJB e não o seu DAO.
Quem tem que se virar com o DAO é o EBJ colega.

E outra pergunta, se ele popula corretamente a lista, não está preenchendo o valor no idCategoria?
Quando tu chamar o método para salvar, esse valor não está preenchido?

Abraços.

M

Já tentei implementar pegando a categoria direto do selectOneMenu, mas pelo que entendi depois não consigo recuperar um objeto dele, só uma string que é o nome do Objeto.
Também tentei implementar um conversor na classe Categoria:

@FacesConverter(forClass = Categoria.class)
    public static class CategoriaControllerConverter implements Converter {

        @Override
        public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
           if(value == null || value.length() == 0){
           return null;
           }
           CategoriaCrtl categoriaCrtl = (CategoriaCrtl) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "categoriacrtl");
           return categoriaCrtl.categoriaDao.find(Integer.valueOf(value));
        }


        @Override
        public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
            if (object == null) {
                return null;
            }
            Categoria categoria = (Categoria)object;
            return categoria.getIdCategoria().toString();
            
        }

        
    }

Mas também não funcionou dá um erro no EJB

M

Nenhum valor é preenchido. Retorna tudo como null. Porém se eu tiro o relacionamento com categoria e persisto categoria como null. Ele funciona. Mas quando tem relacionamento não

M

Se o forum tiver no lugar errado. Tem como transferir ?

nel

Sim, mas esse é o objetivo.
O que tu pode fazer é usar a propriedade do valueChangeListener para setar “na mão” o objeto que tu precisa.

Eu recomendo fazer dessa forma e enviar ao seu EJB o ID do cara selecionado, lá você faz a busca (find) e com o objetos em mãos você seta ele e depois persiste.
É a maneira mais simples e coerente no meu ponto de vista.

Sobre o mover o tópico, só um moderador pode fazer isso. Só lhe avisei, porque dá próximo você posta lá.
Abraços!

M

É que a Classe que eu chamei de ProdutoDao e CategoriaDao na verdade são meus EJB, o nome é que ficou esquisito. Eu fiz o que vc falou no ultimo post, na minha lista de SelectItem cada item tem como seu valor o id da categoria, eu passo esse id para minha manage bean produtoCrtl e no metodo addProdutos() tem uma logica de busca da categoria, seto ela para produtos e depois persisto. Não funciona por todos os campos que vem da minha view estão como nulo. Esse é o codigo do html gerado da minha view:

Categoria

1 2 teste1211 fadfa dgdgag
<option value="6">teste1548</option>
<option value="7">asdfadfaf</option>
nel

Menkauren:
É que a Classe que eu chamei de ProdutoDao e CategoriaDao na verdade são meus EJB, o nome é que ficou esquisito. Eu fiz o que vc falou no ultimo post, na minha lista de SelectItem cada item tem como seu valor o id da categoria, eu passo esse id para minha manage bean produtoCrtl e no metodo addProdutos() tem uma logica de busca da categoria, seto ela para produtos e depois persisto. Não funciona por todos os campos que vem da minha view estão como nulo. Esse é o codigo do html gerado da minha view:

Categoria

1 2 teste1211 fadfa dgdgag
<option value="6">teste1548</option>
<option value="7">asdfadfaf</option>

Como assim “todos os campos da minha View vem nulos”?Se estiver ocorrendo exceção, poste ela.

M

INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: A lista foi chamada
INFO: findAll categoria foi chamado
INFO: br.ecommerce.model.Categoria[ idCategoria=1 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=2 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=3 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=4 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=5 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=6 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=7 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=1 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=2 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=3 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=4 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=5 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=6 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=7 ]
INFO: A lista foi chamada
INFO: findAll categoria foi chamado
INFO: br.ecommerce.model.Categoria[ idCategoria=1 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=2 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=3 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=4 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=5 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=6 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=7 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=1 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=2 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=3 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=4 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=5 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=6 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=7 ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>addProdutos foi chamadonull
INFO: >>>>> br.ecommerce.model.Produtos[ idProdutos=null ] ### null ### null ### null // Aqui eu fiz pra debugar, todos os campos estão null. O codigo que gera essa saida esta dentro do meu metodo addProdutos();

AVISO: A system exception occurred during an invocation on EJB CategoriaDao method public br.ecommerce.model.Categoria br.ecommerce.dao.CategoriaDao.find(java.lang.Integer)

javax.ejb.EJBException

at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5193)

at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5091)

at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4879)

at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2039)

at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1990)

at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222)

at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)

at $Proxy348.find(Unknown Source)

at br.ecommerce.dao.<strong>EJB31_Generated__CategoriaDao__Intf____Bean</strong>.find(Unknown Source)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.jboss.weld.util.reflection.SecureReflections$13.work(SecureReflections.java:305)

at org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:54)

at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInvocation(SecureReflectionAccess.java:163)

at org.jboss.weld.util.reflection.SecureReflections.invoke(SecureReflections.java:299)

at org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:125)

at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:62)

at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:125)

at br.ecommerce.dao.org$jboss$weld$bean-web-SessionBean-CategoriaDao_$$<em>WeldProxy.find(org$jboss$weld$bean-web-SessionBean-CategoriaDao</em>$$_WeldProxy.java)

at br.ecommerce.crtl.ProdutoCrtl.addProdutos(ProdutoCrtl.java:69)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.sun.el.parser.AstValue.invoke(AstValue.java:234)

at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)

at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:43)

at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:56)

at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)

at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)

at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

at javax.faces.component.UICommand.broadcast(UICommand.java:315)

at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)

at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)

at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)

at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)

at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)

at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)

at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)

at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)

at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)

at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)

at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)

at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)

at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)

at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)

at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)

at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)

at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)

at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)

at com.sun.grizzly.ContextTask.run(ContextTask.java:71)

at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)

at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)

at java.lang.Thread.run(Thread.java:619)

Caused by: javax.persistence.NoResultException: No entity found for query

at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:83)

at br.ecommerce.dao.CategoriaDao.find(CategoriaDao.java:62)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)

at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)

at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5366)

at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)

at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)

at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)

at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:46)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)

at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)

at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)

at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)

at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)

at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)

at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)

at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5338)

at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5326)

at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)

… 59 more
AVISO: #{produtocrtl.addProdutos}: javax.ejb.EJBException

javax.faces.FacesException: #{produtocrtl.addProdutos}: javax.ejb.EJBException

at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)

at javax.faces.component.UICommand.broadcast(UICommand.java:315)

at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)

at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)

at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)

at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)

at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)

at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)

at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)

at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)

at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)

at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)

at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)

at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)

at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)

at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)

at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)

at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)

at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)

at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)

at com.sun.grizzly.ContextTask.run(ContextTask.java:71)

at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)

at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)

at java.lang.Thread.run(Thread.java:619)

Caused by: javax.faces.el.EvaluationException: javax.ejb.EJBException

at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)

at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

 32 more

Caused by: javax.ejb.EJBException

at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5193)

at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5091)

at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4879)

at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2039)

at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1990)

at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222)

at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)

at $Proxy348.find(Unknown Source)

at br.ecommerce.dao.<strong>EJB31_Generated__CategoriaDao__Intf____Bean</strong>.find(Unknown Source)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.jboss.weld.util.reflection.SecureReflections$13.work(SecureReflections.java:305)

at org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:54)

at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInvocation(SecureReflectionAccess.java:163)

at org.jboss.weld.util.reflection.SecureReflections.invoke(SecureReflections.java:299)

at org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:125)

at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:62)

at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:125)

at br.ecommerce.dao.org$jboss$weld$bean-web-SessionBean-CategoriaDao_$$<em>WeldProxy.find(org$jboss$weld$bean-web-SessionBean-CategoriaDao</em>$$_WeldProxy.java)

at br.ecommerce.crtl.ProdutoCrtl.addProdutos(ProdutoCrtl.java:69)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.sun.el.parser.AstValue.invoke(AstValue.java:234)

at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)

at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:43)

at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:56)

at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)

at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)

 33 more

Caused by: javax.persistence.NoResultException: No entity found for query

at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:83)

at br.ecommerce.dao.CategoriaDao.find(CategoriaDao.java:62)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)

at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)

at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5366)

at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)

at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)

at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)

at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:46)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)

at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)

at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)

at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)

at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)

at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)

at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)

at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5338)

at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5326)

at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)

 59 more

INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: A lista foi chamada
INFO: EJBclass br.ecommerce.dao.CategoriaDaodestruido
INFO: findAll categoria foi chamado
INFO: br.ecommerce.model.Categoria[ idCategoria=1 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=2 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=3 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=4 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=5 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=6 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=7 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=1 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=2 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=3 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=4 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=5 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=6 ]
INFO: br.ecommerce.model.Categoria[ idCategoria=7 ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]
INFO: >>>>>>>>>>>>>Construtor produto foi chamado
INFO: >>>>>>>>>>get produtos foi chamado br.ecommerce.model.Produtos[ idProdutos=null ]

nel

Oi.

Veja: Caused by: javax.persistence.NoResultException: No entity found for query

Como está sua query? :slight_smile:
Acho que o problema está ali colega.

Gera o Log com o id que está sendo passado para o find também.
Abraços.

p.s: posta sua query e o objeto referente a ela.

M

Postei no primeiro post, é o método find dentro do CategoriaDao.

public Categoria find(Integer id) { Query query = entityManager.createNamedQuery("Categoria.findByIdCategoria"); query.setParameter("idCategoria", id); Categoria categoria = (Categoria) query.getSingleResult(); return categoria; }

na model Produto.

@NamedQuery(name = "Categoria.findByIdCategoria", query = "SELECT c FROM Categoria c WHERE c.idCategoria = :idCategoria")

Ps: O problema é que como o id da minha view é recuperado como nulo e passado para o metodo find, ele não encontra nada

nel

Algo que realmente está estranho no seu ManagedBean, é ele ser do tipo Session e mesmo assim chamar constantemente o construtor dele.

Por curiosidade, tente adicionar isso ao seu bean:

@ManagedBean(name="produtocrtl")
@Session
public class ProdutoCrtl implements Serializable {
...

}

E um detalhe importante:

<h:selectOneMenu value="#{produtocrtl.idCategoria}" >  
                    <f:selectItems value="#{categoriacrtl.selectItemCategoria}"/>  
                </h:selectOneMenu>

Não seria produtocrtl.selectItemCategoria ?
Porque tu está indo em um bean para carregar o select e setando o valor selecionado em outro?

M

Cara !!! funcionou … KKKKKK
E eu já tinha feito isso de trocar para manageBean a anotação um monte de vez. KKKKK
Mas qual a lógica disso ? Não era pra funcionar com named também ??
Cara, valeu pela ajuda, fico muito grato mesmo.

nel

Menkauren:
Cara !!! funcionou … KKKKKK
E eu já tinha feito isso de trocar para manageBean a anotação um monte de vez. KKKKK
Mas qual a lógica disso ? Não era pra funcionar com named também ??
Cara, valeu pela ajuda, fico muito grato mesmo.

Eu estava achando estranho mesmo ele chamar tantas vezes o seu construtor sendo uma Session.
Depois que eu percebi que não constava o annotation. A realidade é que ele não devia estar injetando como um ManagedBean e sendo gerenciado corretamente pelo container web, causando aqueles erros.

Bom, adicione [Resolvido] ao fim do seu tópico.
Forte abraço!

Criado 16 de novembro de 2011
Ultima resposta 16 de nov. de 2011
Respostas 13
Participantes 2