GWT con JPAGWT con JPA - ningún proveedor de persistencia
Hay dos proyectos en mi espacio de trabajo de Eclipse, vamos a nombrarlos:
-JPAProject -GWTProject
JPAProject contiene material de configuración de la APP (permanencia .xml, clases de entidad, etc.). GWTProject es un proyecto ejemplar de GWT (tomado del tutorial oficial de GWT).
Ambos proyectos funcionan bien solos. Es decir, puedo crear EMF (EntityManagerFactory) en JPAProject y obtener entidades de la base de datos. GWTProject funciona bien también, puedo ejecutarlo, completar el texto del campo en el navegador y obtener la respuesta.
Mi objetivo es llamar a JPAProject desde GWTProject para obtener entidades. Pero el problema es que cuando se llama a DAO, me sale el siguiente excepción:
[WARN] Server class 'com.emergit.service.dao.profile.ProfileDaoService' could not be found in the web app, but was found on the system classpath
[WARN] Adding classpath entry 'file:/home/maliniak/workspace/emergit/build/classes/' to the web app classpath for this session
[WARN] /gwttest/greet
javax.persistence.PersistenceException: No Persistence provider for EntityManager named emergitPU
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at com.emergit.service.dao.profile.JpaProfileDaoService.<init>(JpaProfileDaoService.java:19)
at pl.maliniak.server.GreetingServiceImpl.<init>(GreetingServiceImpl.java:21)
...
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
[ERROR] 500 - POST /gwttest/greet (127.0.0.1) 3812 bytes
supongo que las advertencias al principio pueden ser omitidos por ahora.
¿Tiene alguna idea? Creo que me falta algo básico. Todos los consejos son muy apreciados.
Actualización: Mi proveedor de persistencia está bien definido, el proyecto de la APP funciona bien por sí mismo.
Supongo que es problema relacionado con classpath también. Al ejecutar el proyecto GWT, en WEB-INF/lib
, solo hay gwt-servlet.jar
.
¿Cree que la única solución es crear un archivo Ant personalizado para compilar todo (es decir, hacer jar del proyecto JPA y copiarlo en WEB-INF/lib
)? ¿O hay alguna solución de Eclipse, por lo que podría establecer las propiedades del proyecto GWT correctamente para que el proyecto GWT sepa incluir el archivo persistence.xml
?
Actualización: OK, lo tengo funcionando. Intenté poner persitence.xml en todas partes en war/WEB-INF donde era posible, pero seguí obteniendo el error 'no persistence provider'. Resultó que no se trataba de persistencia.xml. No copié el archivo eclipselink en WEB-INF/lib, por lo que no pude encontrar la clase de proveedor definida en persistence.xml. Copiar todos los frascos hizo la cosa.
Muchas gracias Pascal.
¿Puedes confirmar que no tienes habilitado Google App Engine por accidente? GAE no le permite conectarse a bases de datos, y es un error de principiante muy común. –