Erro injeção de dependencia

5 respostas
N

Boa tarde

Eu to tentando executar uma aplicação javaEE e ta dando o seguinte erro

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB

root cause

javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB

root cause

javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB

root cause

javax.ejb.CreateException: Could not create stateless EJB

root cause

com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote ejb-ref name=com.rfmagni.lojacd.controler.ControladorLoja/lojaDAO,Remote 3.x interface =com.rfmagni.lojacd.persistencia.LojaDAO,ejb-link=null,lookup=,mappedName=,jndi-name=com.rfmagni.lojacd.persistencia.LojaDAO,refType=Session into class com.rfmagni.lojacd.controler.ControladorLoja: Lookup failed for 'java:comp/env/com.rfmagni.lojacd.controler.ControladorLoja/lojaDAO' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}

root cause

javax.naming.NamingException: Lookup failed for 'java:comp/env/com.rfmagni.lojacd.controler.ControladorLoja/lojaDAO' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=com.rfmagni.lojacd.controler.ControladorLoja/lojaDAO,Remote 3.x interface =com.rfmagni.lojacd.persistencia.LojaDAO,ejb-link=null,lookup=,mappedName=,jndi-name=com.rfmagni.lojacd.persistencia.LojaDAO,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'com.rfmagni.lojacd.persistencia.LojaDAO#com.rfmagni.lojacd.persistencia.LojaDAO' [Root exception is javax.naming.NamingException: Lookup failed for 'com.rfmagni.lojacd.persistencia.LojaDAO#com.rfmagni.lojacd.persistencia.LojaDAO' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: com.rfmagni.lojacd.persistencia.LojaDAO#com.rfmagni.lojacd.persistencia.LojaDAO not found]]]

root cause

javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=com.rfmagni.lojacd.controler.ControladorLoja/lojaDAO,Remote 3.x interface =com.rfmagni.lojacd.persistencia.LojaDAO,ejb-link=null,lookup=,mappedName=,jndi-name=com.rfmagni.lojacd.persistencia.LojaDAO,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'com.rfmagni.lojacd.persistencia.LojaDAO#com.rfmagni.lojacd.persistencia.LojaDAO' [Root exception is javax.naming.NamingException: Lookup failed for 'com.rfmagni.lojacd.persistencia.LojaDAO#com.rfmagni.lojacd.persistencia.LojaDAO' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: com.rfmagni.lojacd.persistencia.LojaDAO#com.rfmagni.lojacd.persistencia.LojaDAO not found]]

root cause

javax.naming.NamingException: Lookup failed for 'com.rfmagni.lojacd.persistencia.LojaDAO#com.rfmagni.lojacd.persistencia.LojaDAO' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: com.rfmagni.lojacd.persistencia.LojaDAO#com.rfmagni.lojacd.persistencia.LojaDAO not found]

root cause

javax.naming.NameNotFoundException: com.rfmagni.lojacd.persistencia.LojaDAO#com.rfmagni.lojacd.persistencia.LojaDAO not found

note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.1.1 logs.

alguem ai poderia me ajudar??

5 Respostas

A

cara,

posta seus codigos ai para ver o que vc ta fazendo

t+

N

Cara estou mandando em anexo as minhas classe…

A

cara,

posta o codigo ai

t+

N

Se abaixo as minhas classes

@EJB
@LocalBean
public class PersistenceController {
    
    @PersistenceContext(unitName = "Loja-ejbPU")
    private EntityManager em;
    
    
    public <T> void persist(T entity)
    {
        em.persist(entity);
    }
    
    public <T> T merge(T entity)
    {
        return em.merge(entity);
    }
    
    public <T> void remove(T entity)
    {
        em.remove(entity);
    }
    
    public Query createNamedQuery(String name)
    {
        return em.createNamedQuery(name);
    }
    
        
    public Object find(Object id, Class type)
    {
        return em.find(type, id);
    }
    
}
@Stateless
public class ControladorLoja implements ControladorLojaLocal {

    @EJB
    private LojaDAO lojaDAO;
    
    
    @Override
    public List<Loja> listarLojas() {
        return lojaDAO.findAll();
    }

    @Override
    public Loja retornaLoja(String nome) {
        return (Loja) lojaDAO.procurarLoja(nome);
    } 
}
@Local
public interface ControladorLojaLocal {
    
    public List<Loja> listarLojas();
    
    public Loja retornaLoja(String nome);
    
}
@EJB
@LocalBean
public class LojaDAO {

    @EJB
    private PersistenceController persistenceController;

    public void persistir(Loja loja) {
        persistenceController.persist(loja);
    }

    public void remover(Loja loja) {
        persistenceController.remove(loja);
    }

    public void alterar(Loja loja) {
        persistenceController.merge(loja);
    }

    public List<Loja> findAll() {
        Query query = persistenceController.createNamedQuery("Loja.findAll");

        return query.getResultList();
    }

    public Loja procurarLoja(String nome) {
        Query query = persistenceController.createNamedQuery("Loja.findByNome").setParameter(0, nome);
        return (Loja) query.getSingleResult();
    }

    public Loja findById(Class classe, Object id) {
        return (Loja) persistenceController.find(id, Loja.class);
    }
}
@Entity
@Table(name = "loja")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Loja.findAll", query = "SELECT l FROM Loja l"),
    @NamedQuery(name = "Loja.findByIdLoja", query = "SELECT l FROM Loja l WHERE l.idLoja = :idLoja"),
    @NamedQuery(name = "Loja.findByNome", query = "SELECT l FROM Loja l WHERE l.nome = :nome"),
    @NamedQuery(name = "Loja.findByCidade", query = "SELECT l FROM Loja l WHERE l.cidade = :cidade")})
public class Loja implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "id_loja")
    private Integer idLoja;
    @Size(max = 45)
    @Column(name = "nome")
    private String nome;
    @Size(max = 45)
    @Column(name = "cidade")
    private String cidade;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "lojaIdLoja")
    private Collection<Departamento> departamentoCollection;

    public Loja() {
    }

    public Loja(Integer idLoja) {
        this.idLoja = idLoja;
    }

    public Integer getIdLoja() {
        return idLoja;
    }

    public void setIdLoja(Integer idLoja) {
        this.idLoja = idLoja;
    }

    public String getNome() {
        return nome;
    }

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

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    @XmlTransient
    public Collection<Departamento> getDepartamentoCollection() {
        return departamentoCollection;
    }

    public void setDepartamentoCollection(Collection<Departamento> departamentoCollection) {
        this.departamentoCollection = departamentoCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idLoja != null ? idLoja.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 Loja)) {
            return false;
        }
        Loja other = (Loja) object;
        if ((this.idLoja == null && other.idLoja != null) || (this.idLoja != null && !this.idLoja.equals(other.idLoja))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.rfmagni.lojacd.beans.Loja[ idLoja=" + idLoja + " ]";
    }
    
}
A

cara,

vc ta fazendo uma confusão em relação a EJB 3, te indicaria dar uma estudada melhor. fiz algumas modificações no seu codigo, mas pode ser melhorado ainda.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rfmagni.lojacd.controler;

import com.rfmagni.lojacd.beans.Loja;
import com.rfmagni.lojacd.interfaces.ControladorLojaLocal;
import com.rfmagni.lojacd.persistencia.LojaDAO;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author rodrigo
 */
@Stateless
public class ControladorLoja implements ControladorLojaLocal {
    
	@PersistenceContext(unitName = "Loja-ejbPU")
    private EntityManager em;
    
    @Override
    public List<Loja> listarLojas() {
        return new LojaDAO(em).findAll();
    }

    @Override
    public Loja retornaLoja(String nome) {
        return new LojaDAO(em).procurarLoja(nome);
    } 
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rfmagni.lojacd.interfaces;

import com.rfmagni.lojacd.beans.Loja;
import com.rfmagni.lojacd.persistencia.LojaDAO;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Local;

/**
 *
 * @author rodrigo
 */
@Local
public interface ControladorLojaLocal {
    
    public List<Loja> listarLojas();
    
    public Loja retornaLoja(String nome);
    
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rfmagni.lojacd.beans;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Usuario Java
 */
@Entity
@Table(name = "loja")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Loja.findAll", query = "SELECT l FROM Loja l"),
    @NamedQuery(name = "Loja.findByIdLoja", query = "SELECT l FROM Loja l WHERE l.idLoja = :idLoja"),
    @NamedQuery(name = "Loja.findByNome", query = "SELECT l FROM Loja l WHERE l.nome = :nome"),
    @NamedQuery(name = "Loja.findByCidade", query = "SELECT l FROM Loja l WHERE l.cidade = :cidade")})
public class Loja implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "id_loja")
    private Integer idLoja;
    @Size(max = 45)
    @Column(name = "nome")
    private String nome;
    @Size(max = 45)
    @Column(name = "cidade")
    private String cidade;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "lojaIdLoja")
    private Collection<Departamento> departamentoCollection;

    public Loja() {
    }

    public Loja(Integer idLoja) {
        this.idLoja = idLoja;
    }

    public Integer getIdLoja() {
        return idLoja;
    }

    public void setIdLoja(Integer idLoja) {
        this.idLoja = idLoja;
    }

    public String getNome() {
        return nome;
    }

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

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    @XmlTransient
    public Collection<Departamento> getDepartamentoCollection() {
        return departamentoCollection;
    }

    public void setDepartamentoCollection(Collection<Departamento> departamentoCollection) {
        this.departamentoCollection = departamentoCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idLoja != null ? idLoja.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 Loja)) {
            return false;
        }
        Loja other = (Loja) object;
        if ((this.idLoja == null && other.idLoja != null) || (this.idLoja != null && !this.idLoja.equals(other.idLoja))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.rfmagni.lojacd.beans.Loja[ idLoja=" + idLoja + " ]";
    }
    
}
package com.rfmagni.lojacd.persistencia;

import com.rfmagni.lojacd.beans.Loja;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 * @author Rodrigo Francisco Magni
 */

public class LojaDAO extends PersistenceController<Loja> {
	
	public LojaDAO(EntityManager em){
		super(em);
	}

    public void persistir(Loja loja) {
        persist(loja);
    }

    public void remover(Loja loja) {
        remove(loja);
    }

    public void alterar(Loja loja) {
        merge(loja);
    }

    public List<Loja> findAll() {
        Query query = createNamedQuery("Loja.findAll");

        return query.getResultList();
    }

    public Loja procurarLoja(String nome) {
        Query query = createNamedQuery("Loja.findByNome").setParameter(0, nome);
        return query.getSingleResult();
    }

    public Loja findById(Class classe, Object id) {
        return find(id, Loja.class);
    }
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rfmagni.lojacd.persistencia;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Usuario Java
 */

public abstract class PersistenceController<T> {
    
    //@PersistenceContext(unitName = "Loja-ejbPU") na versão EJB 3, se vc colocar essa anotação aqui nao vai funcionar, na versão EJB 3.1 sim
    private EntityManager em;
	
	protected PersistenceController(EntityManager em){
		this.em = em;
	}
    
    public <T> void persist(T entity)
    {
        em.persist(entity);
		em.flush();
    }
    
    public <T> T merge(T entity)
    {
		em.merge(entity)
        em.flush();
		return entity;
    }
    
    public <T> void remove(T entity)
    {
        em.remove(entity);
		em.flush();
    }
    
    public Query createNamedQuery(String name)
    {
        return em.createNamedQuery(name);
    }
    
        
    public Object find(Object id, Class type)
    {
        return em.find(type, id);
    }
    
}

espero ter te ajudado.

t+

Criado 30 de setembro de 2011
Ultima resposta 30 de set. de 2011
Respostas 5
Participantes 2