Problema de persistencia con TopLink y Glassfish 3

230 views
Skip to first unread message

Caio

unread,
Sep 17, 2010, 6:31:12 PM9/17/10
to JavaSOS
Hola comunidad, tengo un problema con la persistencia de una
aplicacion empresarial JEE ... el proyecto está divido en capar ..
capa persistencia, negocios .. que serian los ejb y capa web ..
richfaces .. mi problema es que para la conexion con la base de
datos .. tengo configurado el datasource en el servidor entonces en
la capa de persistencia para consultar la base de datos tengo el
siguiente codigo en un EJB ..
....
@EJB private EntityManager em;

public EntityManager getEm(){
return this.em;
}

@PersistenceContext(unitName="IntegralSoftPU")
public void setEm(EntityManager em){
this.em = em;
}

public List<Usuario> getLista() {
try {
Query q = (Query) getEm().createQuery("select object(o)
from Usuario as o");
return q.getResultList();
} finally {
}
}


el problema está en que no puedo desplegar el proyecto en el servidor,
me tira error .. es como si no pudiera inyectar el contexto de
persistencia...

el error del servidor al desplegar la aplicaciones es el siguiente :


Caused by: javax.ejb.CreateException: Could not create stateless EJB
at
com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:
528)
at com.sun.ejb.containers.StatelessSessionContainer.access
$000(StatelessSessionContainer.java:90)
at com.sun.ejb.containers.StatelessSessionContainer
$SessionContextFactory.create(StatelessSessionContainer.java:718)
... 93 more
Caused by:
com.sun.enterprise.container.common.spi.util.InjectionException:
Exception attempting to inject Remote ejb-ref
name=com.seguridad.dao.UsuarioDAO/em,Remote 3.x interface
=javax.persistence.EntityManager,ejb-
link=null,lookup=null,mappedName=,jndi-
name=javax.persistence.EntityManager,refType=Session into class
com.seguridad.dao.UsuarioDAO
at
com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:
614)
at
com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:
384)
at
com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:
168)
at
com.sun.ejb.containers.BaseContainer.injectEjbInstance(BaseContainer.java:
1671)
at
com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:
488)
... 95 more
Caused by: javax.naming.NamingException: Lookup failed for 'java:comp/
env/com.seguridad.dao.UsuarioDAO/em' in SerialContext [Root exception
is javax.naming.NamingException: Exception resolving Ejb for 'Remote
ejb-ref name=com.seguridad.dao.UsuarioDAO/em,Remote 3.x interface
=javax.persistence.EntityManager,ejb-
link=null,lookup=null,mappedName=,jndi-
name=javax.persistence.EntityManager,refType=Session' . Actual
(possibly internal) Remote JNDI name used for lookup is
'javax.persistence.EntityManager#javax.persistence.EntityManager' [Root
exception is javax.naming.NamingException: Lookup failed for
'javax.persistence.EntityManager#javax.persistence.EntityManager' in
SerialContext [Root exception is javax.naming.NameNotFoundException:
javax.persistence.EntityManager#javax.persistence.EntityManager not
found]]]
at
com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:
442)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at
com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:
513)
... 99 more
Caused by: javax.naming.NamingException: Exception resolving Ejb for
'Remote ejb-ref name=com.seguridad.dao.UsuarioDAO/em,Remote 3.x
interface =javax.persistence.EntityManager,ejb-
link=null,lookup=null,mappedName=,jndi-
name=javax.persistence.EntityManager,refType=Session' . Actual
(possibly internal) Remote JNDI name used for lookup is
'javax.persistence.EntityManager#javax.persistence.EntityManager' [Root
exception is javax.naming.NamingException: Lookup failed for
'javax.persistence.EntityManager#javax.persistence.EntityManager' in
SerialContext [Root exception is javax.naming.NameNotFoundException:
javax.persistence.EntityManager#javax.persistence.EntityManager not
found]]
at
com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:
174)
at
com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl
$EjbReferenceProxy.create(ComponentEnvManagerImpl.java:1040)
at
com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:
688)
at
com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:
657)
at
com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:
148)
at
com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:
428)
... 101 more
Caused by: javax.naming.NamingException: Lookup failed for
'javax.persistence.EntityManager#javax.persistence.EntityManager' in
SerialContext [Root exception is javax.naming.NameNotFoundException:
javax.persistence.EntityManager#javax.persistence.EntityManager not
found]
at
com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:
442)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at
com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:
169)
... 106 more
Caused by: javax.naming.NameNotFoundException:
javax.persistence.EntityManager#javax.persistence.EntityManager not
found
at
com.sun.enterprise.naming.impl.TransientContext.doLookup(TransientContext.java:
197)
at
com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:
168)
at
com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:
58)
at
com.sun.enterprise.naming.impl.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:
101)
at
com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:
430)
... 108 more




TAMPOCO FUNCIONA CON ESTE CODIGO

@Resource
private UserTransaction utx = null;
@PersistenceUnit(unitName = "JsfJpaCrudPU")
private EntityManagerFactory emf = null;

public EntityManager getEntityManager() {
return emf.createEntityManager();
}


NO ME PUEDO DAR CUENTA DONDE TENGO QUE REVISAR, CONTROLAR O MODIFICAR
PARA QUE LA APLICACION PUEDA FUNCIONAR


OTRO INFO UTIL ES QUE SI YO SACO TODAS ESTAS ANOTACIONES LA APLICACION
FUNCIONA PERFECTAMENTE ...

AGRADEZCO CUALQUIER COMENTARIO QUE ME PERMITA SOLUCIONAR ESTE
PROBLEMA.

Santiago Risaro

unread,
Sep 18, 2010, 1:56:26 PM9/18/10
to jav...@googlegroups.com
Si no me equivoco el EntityManager no lleva la anotación @EJB, probá con esto:

@PersistenceContext 
EntityManager em;

2010/9/17 Caio <claudi...@gmail.com>

--
www.JavaSOS.com
Grupo de colaboración Java/J2ee para desarrolladores de habla hispana.

CLAUDIO TROSCH

unread,
Sep 19, 2010, 9:56:13 AM9/19/10
to jav...@googlegroups.com
Gracias Santiago.. era la anotación@EJB, tenia el problema en la punta de la nariz y no lo veia.. es cierto que aveces hace falta una mirada externa para solucionar los problemas .. 

Saludos
CLAUDIO TROSCH
Reply all
Reply to author
Forward
0 new messages