2009-05-12 13 views
9

La mia squadra sta intraprendendo il suo primissimo progetto GWT. Siamo abbastanza forti con le applicazioni Swing, con quasi tutto il nostro lavoro che coinvolge importanti GUI Swing.GWT: Gotcha

Tuttavia, questa è la nostra prima incursione dal desktop e sul Web e il progetto richiede l'utilizzo di GWT. Il progetto in sé è abbastanza semplice, l'unico a noi sconosciuto che sta sostituendo l'interfaccia utente di Swing con l'interfaccia utente GWT.

Quali insidie ​​dovremmo fare attenzione?

risposta

7

Non in uso GIN e Guice. L'iniezione di dipendenza è molto, molto utile. GIN (Guice per GWT) non è documentato molto bene, ma vale il tempo investito per farlo funzionare.

+0

Bello. Pensi di averlo fatto apposta? Sto pensando che bere sia più raccomandato che sorseggiare in questo caso. –

+0

GIN ** è ** ben documentato - i documenti GIN coprono tutte le differenze tra GIN e Guice. Per tutto il resto, consulta i documenti Guice (che trovo sufficienti e ben scritti) - non è necessario mettere le stesse informazioni in due punti. –

+1

Sono passati un paio di mesi da quando ho risposto a questo. Forse è migliorato.Sento che le persone parlano di qualcosa chiamato "UiBinder" ora. –

2

Diversi browser hanno caratteristiche di prestazioni molto diverse, quindi dovrete testare diversi browser, anche se GWT genera soluzioni alternative Javascript per le differenze tra browser.

La creazione di elementi DOM può essere molto lenta in alcuni browser. Se hai tabelle di grandi dimensioni (dozzine di righe) che cambiano frequentemente, il browser può non rispondere se si eliminano tutte le righe e le si ricrea. Abbiamo dovuto scrivere un algoritmo diffcatorio per aggiornare in modo efficiente le tabelle quando i nuovi contenuti sono stati recuperati dal server.

11

mi viene in mente di pochi:

  • Tutto è asincrona. Bene, qualsiasi servizio orientato in ogni caso. Mentre Swing a volte agisce in questo modo tramite SwingWorkers e simili, Swing è fondamentalmente sincrono tramite EDT (thread di dispacciamento dell'evento). Ci vuole un po 'per abituarsi;
  • Sei in un mondo di dolore noto come compatibilità CSS e cross-browser. Mentre GWT maschera molte delle differenze tra i browser, di certo non le maschera tutte e puoi passare ore a cercare l'origine di una linea di pixel in GWT come puoi in un normale sito Web;
  • Ci sono molte meno risorse per Swing rispetto a GWT;
  • È possibile utilizzare solo determinate classi sul lato client. Quello che mi causava sempre problemi era BigDecimal;
  • Le tue scelte di widget sono molto più limitate. Qualunque cosa tu faccia evita ExtGWT come la piaga. Daryls è come Jeffrey Dahmer di Generics;
  • Assicurarsi di utilizzare GWT 1.6;
  • Il tempo di compilazione su GWT è semplicemente orribile;
  • Se si apportano modifiche al client (ovvero non si stanno modificando le interfacce di servizio), non è necessario ricostruire per visualizzare tali modifiche. Basta aggiornare nel browser ospitato;
  • Per le modifiche al codice server che non modifica le interfacce, assicurarsi di disporre di un'attività Ant o Maven per ricostruire e ridistribuire le classi senza eseguire una ricostruzione GWT;
  • È possibile puntare il browser ospitato su un dispositivo diverso dal server ospitato e eseguire il debug utilizzando tale browser; e
  • Assicurati che la tua macchina abbia molta RAM. Il mio IDE su alcune app avrebbe eliminato gli errori di memoria se meno di un gig di RAM gli era stato assegnato e queste non erano app enormi. Consiglio vivamente il minimo assoluto della RAM del sistema 2gigs, preferibilmente 3 o più.
+0

Solo per curiosità, perché dovresti evitare ExtGWT? –

0

Mi sono imbattuto in un problema in cui il tentativo di popolare le tabelle attraverso la raccolta nidificata non funzionava, presumibilmente perché il compilatore non l'ha capita (problema @GWT list). Si noti che questo era circa un anno fa, quindi potrebbe non essere più il caso.

Il secondo problema (ancora una volta, un anno fa, potrebbe non essere più il caso) era che la compilazione su una scatola a 64 bit con una JVM a 64 bit non era supportata, quindi ho finito per richiedere un 32 bit separato jvm e il wrapping di un'attività di formica che ha fatto esplicito riferimento a quello per l'installazione di compilazione GWT.

3

Per approfondire ciò che Cletus ha detto su "determinate classi", non si dispone di un JRE completo sul lato client GWT. (Ricorda, il codice client Java GWT è tradotto in JavaScript). Ciò significa che le API Java di terze parti spesso non funzionano sul lato client. Devono essere convertiti per GWT. Così tanto per scrivere una volta, correre ovunque. Vedere here per ulteriori informazioni su questa limitazione.

1

La maggior parte di questi sono ancora al 100% pertinenti a ciò che si vuole fare:

Biggest GWT Pitfalls?

Per affrontare specificamente la Swing -> GWT transizione c'è una regola semplice:

  • GWT è non Swing, e per costruire una buona app devi sempre sapere a che livello di HTML verranno generati i widget che stai creando e ogni tanto dovrai scendere e sporcare e modificare alcuni dei comportamenti o persino codifica alcune parti personalizzate in javascri pt o HTML.
1

Uno dei principali trucchi da tenere a mente è il test. Testare un'app di swing con junit è per lo più semplice, ma per ottenere quel livello di copertura su un'app gwt è necessario ampliare il proprio arsenale.

  1. Unità juta - Questo è adatto per classi di modelli/utilità che non fanno riferimento a nessuno del runtime gwt. Basta scrivere ed eseguire i test come junit normale, ma assicurati che gwt non provi a compilare il tuo codice di test nel tuo modulo. Non puoi sempre tenere in considerazione le tue lezioni per ottenere questo tipo di copertura, ma quando puoi farlo è fantastico e veloce.
  2. GWTTestCase/junit - Questa è una sottoclasse TestCase speciale (stile junit3) che eseguirà il boot di alcuni runtime di gwt per l'esecuzione di test. Nella mia esperienza, è troppo difficile ottenere una buona copertura ed è troppo lento per essere utile. Leggi this per ulteriori informazioni sull'argomento.
  3. Selenio: questo ti consente di accedere al browser (ed è personalmente il mio approccio preferito). Se usi java selenium-rc e lo unisci al molo per servire l'app-under-test, puoi persino prendere in giro le chiamate rpc per testare completamente il tuo ui. Hai anche la possibilità di eseguire i test in tutti i principali browser.
0

Anche con 4 GB di RAM è possibile riscontrare problemi nella compilazione della propria app (su GWT 1.6 e precedenti). Non sono in grado di compilare la nostra app (piuttosto grande) al lavoro usando Maven/qualsiasi altra cosa. La modalità Hosted funziona bene, ma nessuna impostazione (aumentando i vincoli di memoria VM a 2 giga, ecc.) Sembra risolvere questo problema.