EJB 3.1 Dependency Injection Fehlgeschlagen

habe ich eine stateless session bean so :

@WebServlet(name = "ProductController", urlPatterns = {"/ProductController"})
public class ProductController extends HttpServlet {

  @EJB
  private ProductFacadeBean productBean;
}

@Stateless
public class ProductFacadeBean extends AbstractFacade<Product> implements ProductFacadeLocalInterface {
  @PersistenceContext(unitName = "OnlineStorePU")
  private EntityManager em;

  protected EntityManager getEntityManager() {
    return em;
  }

  public ProductFacadeBean() {
    super(Product.class);
  }

}

@Local
public interface ProductFacadeLocalInterface {

  void create(Product product);

  void edit(Product product);

  void remove(Product product);

  Product find(Object id);

  List<Product> findAll();

  List<Product> findRange(int[] range);

  int count();

}


public abstract class AbstractFacade<T> {
  private Class<T> entityClass;

  public AbstractFacade(Class<T> entityClass) {
    this.entityClass = entityClass;
  }

  protected abstract EntityManager getEntityManager();

  public void create(T entity) {
    getEntityManager().persist(entity);
  }

  public void edit(T entity) {
    getEntityManager().merge(entity);
  }

  public void remove(T entity) {
    getEntityManager().remove(getEntityManager().merge(entity));
  }

  public T find(Object id) {
    return getEntityManager().find(entityClass, id);
  }

  public List<T> findAll() {
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    cq.select(cq.from(entityClass));
    return getEntityManager().createQuery(cq).getResultList();
  }

  public List<T> findRange(int[] range) {
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    cq.select(cq.from(entityClass));
    javax.persistence.Query q = getEntityManager().createQuery(cq);
    q.setMaxResults(range[1] - range[0]);
    q.setFirstResult(range[0]);
    return q.getResultList();
  }

  public int count() {
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
    cq.select(getEntityManager().getCriteriaBuilder().count(rt));
    javax.persistence.Query q = getEntityManager().createQuery(cq);
    return ((Long) q.getSingleResult()).intValue();
  }

}

Frage :

  1. Was ist der Fehler ? Wie
    es lösen ?

    javax.die Benennung.NamingException: Lookup
    fehlgeschlagen für
    "java:comp/env/Controller.ProductController/productBean'
    in
    SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory,
    java.die Benennung.factory.state=com.Sonne.corba.ee.impl.- Präsentation.rmi.JNDIStateFactoryImpl,
    java.die Benennung.factory.url.pkgs=com.Sonne.enterprise.Benennung}
    [Root exception
    javax.die Benennung.NamingException:
    Ausnahme Ejb-Lösung für Remote
    ejb-ref
    name=Controller.ProductController/productBean,Remote
    3.x-Schnittstelle =EJB.ProductFacadeBean,ejb-link=null,lookup=,mappedName=,jndi-name=EJB.ProductFacadeBean,refType=Session'
    . Tatsächliche (möglicherweise intern) Remote
    JNDI-name für die Suche verwendet wird
    'EJB.ProductFacadeBean#EJB.ProductFacadeBean'
    [Root exception
    javax.die Benennung.NamingException: Lookup
    fehlgeschlagen für
    'EJB.ProductFacadeBean#EJB.ProductFacadeBean'
    in
    SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory,
    java.die Benennung.factory.state=com.Sonne.corba.ee.impl.- Präsentation.rmi.JNDIStateFactoryImpl,
    java.die Benennung.factory.url.pkgs=com.Sonne.enterprise.Benennung}
    [Root exception
    javax.die Benennung.NameNotFoundException:
    EJB.ProductFacadeBean#EJB.ProductFacadeBean
    nicht gefunden]]]

Die volle Ausnahme ist hier beigefügt :

HTTP Status 500 -

type Exception report

message

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

exception

javax.servlet.ServletException: PWC1392: Error instantiating servlet class Controller.ProductController

root cause

com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class Controller.ProductController

root cause

com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote ejb-ref name=Controller.ProductController/productBean,Remote
3.x interface =EJB.ProductFacadeBean,ejb-link=null,lookup=,mappedName=,jndi-name=EJB.ProductFacadeBean,refType=Session into class Controller.ProductController

root cause

javax.naming.NamingException: Lookup failed for 'java:comp/env/Controller.ProductController/productBean' 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=Controller.ProductController/productBean,Remote
3.x interface =EJB.ProductFacadeBean,ejb-link=null,lookup=,mappedName=,jndi-name=EJB.ProductFacadeBean,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'EJB.ProductFacadeBean#EJB.ProductFacadeBean' [Root exception is javax.naming.NamingException: Lookup failed for 'EJB.ProductFacadeBean#EJB.ProductFacadeBean' 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: EJB.ProductFacadeBean#EJB.ProductFacadeBean not found]]]

root cause

javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=Controller.ProductController/productBean,Remote
3.x interface =EJB.ProductFacadeBean,ejb-link=null,lookup=,mappedName=,jndi-name=EJB.ProductFacadeBean,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'EJB.ProductFacadeBean#EJB.ProductFacadeBean' [Root exception is javax.naming.NamingException: Lookup failed for 'EJB.ProductFacadeBean#EJB.ProductFacadeBean' 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: EJB.ProductFacadeBean#EJB.ProductFacadeBean not found]]

root cause

javax.naming.NamingException: Lookup failed for 'EJB.ProductFacadeBean#EJB.ProductFacadeBean' 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: EJB.ProductFacadeBean#EJB.ProductFacadeBean not found]

root cause

javax.naming.NameNotFoundException: EJB.ProductFacadeBean#EJB.ProductFacadeBean 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 logs. GlassFish Server Open Source Edition 3.1
  1. Wenn ich die Sitzung für
    entity bean mit netbeans es
    erstellt die abstrakte Fassade für uns ?
    Was ist der Zweck ? Ich weiß, Fassade
    Muster dienen als Schnittstelle zu
    route die Anfrage ?
  2. Was ist die Verwendung von ejb-jar.xml ?

Alle Einstellungen sind Standard.
Die ejb-bean innerhalb von java-ee-6-web-Anwendung anstatt in einen weiteren Krieg oder Glas.
Glassfish 3.1 server.

Bitte helfen.

Dank.

Ich hoffe mir kann jemand weiterhelfen zu diesem Thema.
Problem gelöst durch injizieren Schnittstelle und nicht als konkrete Klasse.
Warum Wechsel von ProductBean @EJB private ProductFacadeLocalInterface productBean und es funktioniert ?
Wenn das interface wird implementiert, indem zwei konkrete Klassen wie container, wird wissen, was zu instanziieren ?
Haben Sie keine Antwort auf Ihre Letzte Frage ?

InformationsquelleAutor nicholas | 2011-05-31

Schreibe einen Kommentar