2009-04-01 17 views
10

Estoy intentando construir una aplicación de base de datos usando GWT 1.5.3. Yo uso anotaciones JPA con mis objetos. Parece que en modo alojado, RPC de GWT funciona bien. Pero cuando intento compilar mi aplicación usando GWT-compiler, obtengo errores como: "La importación javax.persistence no se puede resolver", "La entidad no se puede resolver a un tipo". toplink-essentials.jar ya está incluido en la ruta de mi proyecto. ¿Qué configuración más necesito para resolver este problema?GWT con JPA

Respuesta

1

Ok, he encontrado lo que faltaba. Necesitaba incluir jpa-annotations-source.jar en mi ruta de GWT-compilador en el script myapp-compile.cmd (o en el archivo de compilación de ant). Por cierto, ¿alguien puede decirme el origen de este archivo jpa-annotations-source.jar?

+2

Además, debería decir que en GWT 1.5 no es necesario incluir el jar anterior. En su lugar solo use el jar de producción como toplink-essentials.jar; por supuesto, pásalo a tu compilador GWT para que la compilación tenga éxito; y NO escriba en su app.gwt.xml – synergetic

6

Debe incluir el código fuente para las anotaciones JPA en la ruta de compilación para su proyecto GWT. Vea aquí para más detalles:

http://code.google.com/p/google-web-toolkit/issues/detail?id=1830&can=1&q=jpa

Específicamente este archivo JAR que arreglar el problema:

http://google-web-toolkit.googlecode.com/issues/attachment?aid=1475633892125294312&name=jpa-annotations-source.jar

+0

El enlace ha cambiado a http: // google-web- toolkit.googlecode.com/issues/attachment?aid=1475633892125294312&name=jpa-annotations-source.jar&token=672fe08de2c4a90493f62b6daaf3ae1e. No debe depender de tal enlace ya que se regeneran periódicamente de forma dinámica. Debería google para "jpa-annotations-source.jar google-web-toolkit.googlecode.com/issues/attachment". –

1

También estoy trabajando con JPA < - transformación de datos> GWT etc.

En un esfuerzo por eliminar la capa DTO Solía ​​Gilead también.

Mi objeción aquí es acerca de la traducción de javax.persistence. Para evitar esto, utilicé declaraciones de mapeo XML JPA (orm.xml)

2

El problema general de JPA y GWT es que GWT por sí mismo no admite clases de JPA sofisticadas, por lo que solo hace simples entidades persistentes POJO DTO que implementa el java.io.Serializable y tiene anotaciones de recursos JPA simples. Es necesario crear las clases de entidad en el ámbito de aplicación del cliente GWT o lo tiene bajo el paquete yourproject.client o añadirlos con

ruta de origen = "cliente"

trayectoria

fuente = "folderOfYourEntities"

en el archivo YouProject.gwt.xml del proyecto GWT. Esto incluirá los objetos de entidad en el cliente GWT para que puedan usarlos también en el lado del cliente de la RPC. El DAO debe estar en el lado del servidor y puede contener todo lo que soporte su contenedor.

El problema que tiene ahora es que, al compilar, el compilador de GWT dice que no sabe cuáles son esas importaciones para las anotaciones JPA en las clases de entidad DTO. Es por eso que necesita la clase javax.persistence y los códigos fuente. La referencia jpa-annotation-source.jar de Rustmyself funciona. Son solo los archivos de clase compilados javax.persistence y los archivos de códigos fuente más un Persistence.gwt.xml. Es un módulo GWT simple para el paquete javax.persistence. Si sabe cómo hacer su propio módulo GWT, debería tener problemas para que todo esto funcione. Por cierto, la fuente oficial de Java EE se puede encontrar en la sección de construcción del sitio glassfish dev wiki.glassfish.java.net

Hay muchas otras soluciones que envuelven sus elegantes entidades PU a objetos simples usando proxy o para cargarlos perezosos en tiempo de ejecución. Funcionan, pero no son soluciones óptimas. La mejor práctica es hacer las cosas simples y robustas desde el principio teniendo entidades POJO JPA DTO en el contexto del cliente GWT y DAO completo en el servidor.

GWTPersistence Ejemplo
he añadido un ejemplo real de trabajo sobre cómo hacer GWT y JPA funcionan a la perfección. Es un proyecto de NetBean con códigos fuente y archivo de implementación. Ver GWTPersistence on NingZhang.info

1

¡Simplemente, guarde otra versión de sus Entidades pero sin las anotaciones!

-1

Rebote en el comentario de sinérgica, ahora (de GWT 1.5) sólo tiene que añadir

<source path='javax.persistence'/> 

a su Module.gwt.xml