2009-04-01 19 views
10

Sto provando a creare un'applicazione database utilizzando GWT 1.5.3. Uso le annotazioni JPA con i miei oggetti. Sembra in modalità host GPC RPC funziona bene. Ma quando provo a compilare la mia app usando il compilatore GWT ottengo errori come: "L'importazione javax.persistence non può essere risolta", "L'entità non può essere risolta in un tipo". toplink-essentials.jar è già incluso nel mio percorso del progetto. Di quali impostazioni ho bisogno per risolvere questo problema?GWT con JPA

risposta

1

Ok, ho trovato quello che mi mancava. Dovevo includere jpa-annotations-source.jar nel mio percorso del compilatore GWT nello script myapp-compile.cmd (o nel file di build ant). A proposito, qualcuno può dirmi l'origine di questo file jpa-annotations-source.jar?

+2

Inoltre, dovrei dire che in GWT 1.5 non è necessario includere il jar sopra. Invece basta usare il jar di produzione come toplink-essentials.jar; ovviamente passalo al tuo compilatore GWT alla compilazione riuscita; e NON scrivere nella tua app.gwt.xml – synergetic

6

È necessario includere il codice sorgente per le annotazioni JPA nel percorso di generazione per il progetto GWT. Vedi qui per maggiori dettagli:

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

In particolare questo file jar che risolvere il problema:

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

+0

Il collegamento è cambiato a http: // google-web- toolkit.googlecode.com/issues/attachment?aid=1475633892125294312&name=jpa-annotations-source.jar&token=672fe08de2c4a90493f62b6daaf3ae1e. Non dovrebbe dipendere da tale collegamento in quanto sono periodicamente rigenerati in modo dinamico. Dovrebbe google per "jpa-annotations-source.jar google-web-toolkit.googlecode.com/issues/attachment". –

1

Sto anche lavorando con JPA < -> GWT trasformazione dei dati, ecc

Nel tentativo di eliminare lo strato DTO ho usato Gilead troppo.

La mia obiezione riguarda la traduzione di javax.persistence. Per evitare ciò, ho utilizzato dichiarazioni di mappatura XML JPA (orm.xml)

2

Il problema generale di JPA e GWT è che GWT non supporta le classi JPA di fantasia, quindi è sufficiente eseguire semplici DPO persistenti di entità POJO che implementano il codice. java.io.Serializable e hanno semplici annotazioni di risorse JPA. È necessario creare le classi di entità nel campo di applicazione del client GWT o ce l'ha sotto il pacchetto yourproject.client o aggiungerli con

percorso di origine = "client"

percorso

fonte = "folderOfYourEntities"

nel file YouProject.gwt.xml del progetto GWT. Ciò includerà gli oggetti entità nel client GWT in modo che possano essere utilizzati anche sul lato client dell'RPC. Il DAO deve essere sul lato server e può contenere tutto ciò che il contenitore supporta.

Il problema che hai ora è che durante la compilazione, GWT compilatore saids che desn't sapere che cosa queste importazioni per annonations JPA sono nelle classi DTO entità. Ecco perché hai bisogno della classe javax.persistence e dei codici sorgente. Il riferimento jpa-annotation-source.jar di Rustmyself funziona. Sono solo i file di classe e i file di codice sorgente compilati javax.persistence più un Persistence.gwt.xml. È un semplice modulo GWT per il pacchetto javax.persistence. Se sai come creare il tuo modulo GWT, dovresti avere problemi a fare tutto questo lavoro. A proposito, la fonte ufficiale per Java EE può essere trovata nella sezione di costruzione del sito dev di glassfish wiki.glassfish.java.net

Ci sono molte altre soluzioni che avvolgono automaticamente le tue fantastiche entità PU con oggetti semplici usando proxy o a pigro caricarli in fase di esecuzione. Funzionano, ma non soluzioni ottimali. La migliore pratica è di rendere le cose semplici e solide fin dall'inizio disponendo di entità DTO POJO JPA nel contesto del client GWT e DAO in esecuzione completa sul server.

GWTPersistence Esempio
ho aggiunto un esempio di lavoro effettivo su come fare GWT e JPA lavorare senza problemi. È un progetto NetBean con codici sorgente e file di implementazione. Vedi GWTPersistence on NingZhang.info

1

Semplicemente, mantieni un'altra versione delle tue Entità ma senza le annotazioni!

-1

rimbalzo sul commento di sinergica, è ora (da GWT 1.5) solo bisogno di aggiungere

<source path='javax.persistence'/> 

al Module.gwt.xml