2009-04-01 6 views
10

Ich versuche Datenbankanwendung mit GWT 1.5.3 zu erstellen. Ich verwende JPA-Annotationen mit meinen Objekten. Es scheint im gehosteten Modus der GWT RPC funktioniert gut. Aber wenn ich versuche, meine App mit dem GWT-Compiler zu kompilieren, bekomme ich Fehler wie: "Die Import-Javax.Persistence kann nicht aufgelöst werden", "Entity kann nicht in einen Typ aufgelöst werden". toplink-essentials.jar ist bereits in meinem Projektpfad enthalten. Welche Einstellungen brauche ich sonst, um dieses Problem zu lösen?GWT mit JPA

Antwort

1

Ok, habe ich gefunden, was ich fehlte. Ich musste jpa-annotations-source.jar in meinen GWT-Compiler-Pfad in myapp-compile.cmd-Skript (oder in Ant-Build-Datei) aufnehmen. Kann mir übrigens jemand den Ursprung dieser jpa-annotations-source.jar-Datei sagen?

+2

Auch sollte ich sagen, dass in GWT 1.5 muss man nicht die oben genannten Glas enthalten. Verwenden Sie stattdessen nur Produktions-Jars wie toplink-essentials.jar; Übergeben Sie es natürlich an Ihren GWT-Compiler, damit die Kompilierung erfolgreich ist; und schreiben Sie nicht in Ihrer app.gwt.xml – synergetic

6

Sie müssen den Quellcode für die JPA-Anmerkungen in den Build-Pfad für Ihr GWT-Projekt einfügen. Sehen Sie hier für weitere Informationen:

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

Insbesondere diese JAR-Datei, die das Problem beheben:

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

+0

Der Link hat sich geändert http hinzufügen: // google-web- toolkit.googlecode.com/issues/attachment?aid=1475633892125294312&name=jpa-annotations-source.jar&token=672fe08de2c4a90493f62b6daaf3ae1e. Sollte nicht auf eine solche Verbindung angewiesen sein, da sie periodisch dynamisch neu generiert werden. Sollte google für "jpa-annotations-source.jar google-web-toolkit.googlecode.com/issues/attachment" sein. –

1

ich arbeite auch mit JPA < -> GWT Datentransformation usw.

In dem Bemühen, die DTO Schicht zu eliminieren ich Gilead auch verwendet.

Mein Einwand hier ist über die Übersetzung javax.persistence. Um dies zu vermeiden, verwendete ich XML JPA Mapping-Deklarationen (orm.xml)

2

Das allgemeine Problem der JPA und GWT ist, dass GWT selbst nicht fancy JPA-Klassen unterstützt, so dass Sie einfach POJO Persistent Entities DTO, die die implementiert java.io.Serializable und haben einfache JPA Resource Annotationen. Sie müssen die Entitätsklassen im Rahmen des GWT Client entweder unter dem yourproject.client Paket erstellen oder sie fügen mit

Quelle path = „Client“

Quelle path = „folderOfYourEntities“

in der Datei YouProject.gwt.xml des GWT-Projekts. Dies schließt die Entitätsobjekte im GWT-Client ein, so dass sie auch auf der Clientseite des RPC verwendet werden können. Das DAO muss auf der Serverseite sein und alles enthalten, was Ihr Container unterstützt.

Das Problem, das Sie jetzt haben, ist, dass GWT Compiler sagte, dass es nicht wissen, was diese Importe für JPA-Annonierungen in den Entity DTO-Klassen sind. Aus diesem Grund benötigen Sie die Klasse javax.persistence und die Quellcodes. Die Referenz jpa-annotation-source.jar von Rustmyself funktioniert. Es sind nur die kompilierten Klassen- und Quellcodedateien javax.persistence und eine Datei Persistence.gwt.xml. Es ist ein einfaches GWT-Modul für das Paket javax.persistence. Wenn Sie wissen, wie Sie Ihr eigenes GWT-Modul erstellen, sollten Sie Probleme damit haben, all dies zu tun. By the way, die offizielle Quelle für die Java EE kann auf der Glassfish dev Seite Build-Bereich gefunden werden. Wiki

Es gibt viele andere Lösungen, die Ihre Phantasie PU-Objekte auf einfache Objekte automatisch mit Proxy oder um sie zur Laufzeit zu laden. Sie arbeiten, aber nicht optimale Lösungen. Die beste Vorgehensweise besteht darin, die Dinge von Anfang an einfach und robust zu gestalten, indem Sie POJO JPA DTO-Entitäten im GWT-Client-Kontext und vollständige DAO auf dem Server verwenden.

GWTPersistence Beispiel
Ich habe ein aktuelles Arbeitsbeispiel hinzugefügt, wie GWT und JPA machen nahtlos arbeiten. Es ist ein NetBean-Projekt mit Quellcodes und Deployment-Datei. Siehe GWTPersistence on NingZhang.info

1

Einfach, halten Sie eine andere Version Ihrer Entitäten, aber ohne die Anmerkungen!

-1

Zurückprallen auf synergetische Kommentar, Sie jetzt (von GWT 1.5) brauchen nur

<source path='javax.persistence'/> 

zu Ihrem Module.gwt.xml