mercoledì 7 maggio 2008

Grails + GWT

Ho finito di leggere ed applicare l'esempio del libro "Getting started with Grails"... sembra proprio essere un gran bel framwork, ottimo per lo sviluppo di service web, praticamente fa tutto lui e grazie alla convention over configuration il codice da scrivere è davvero poco. Eseguendo la logica del MVC sembra non sia difficile integrare, come parte "view" del client dei moduli GWT.

Quindi ora passo allo studio proprio dell'integrazione di Grails con GWT.
Esiste un plugin per grails, già esistente nella normale installazione di Grails: http://grails.org/GWT+Plugin

Purtroppo sul sito di codehouse il plugin, o meglio, l'integrazione effettiva di gwt e grails non sono ben documentate, anzi...
Per prima cosa l'installazione del plugin nei singoli progetti grails non è veloce, almeno la prima volta: eseguito nel progetto racetack, quello che ho creato studiando GSWG, il comando
grails install-plugin gwt
ho dovuto aspettare quasi 10 minuti prima che si "ripulisse la cache"... di cosa non so bene.

Ho quindi creato il modulo gwt, chiamandolo Racetrack, seguendo la classica regola dei nomi del package, quindi con il comando
grails create-gwt-module com.fdlservizi.Racetrack

Seguendo la logica che quella che voglio fare è una view al progetto già esistente e funzionante, ho creato la pagina hosting del modulo gwt pensandola proprio come una view al controller "race".
La convenzione del plug in di gwt vuole che con il comando grails create-gwt-page , dove è la pagina hosting con il relativo path, se la pagina è indicata come una gsp e come indirizzo ha una singola cartella, questa viene interpretata come un controller view, altrimenti viene trattata come una normale pagina web.
Quindi ho eseguito il comando
grails create-gwt-page race/gwt.gsp com.fdlservizi.Racetrack

Tutto ciò dovrebbe avermi creato i file di configurazione necessari per il funzionamento del modulo gwt, e la pagina hosting dove mettere poi i widget gwt.
Con il comando
grails run-gwt-client
parte l'esecuzione dell'hosted mode di gwt, quindi parte anche il "browser" interno di gwt... va però precisato, e io me ne sono accorto dopo un po' di imprecazione, che deve essere attivo il server web... quindi da IDEA prima faccio partire il progetto racetrack e poi eseguo il comando run-gwt-client (ovviamente questo e i comandi precedenti vanno fatti all'interno del path del progetto racetrack)


Edit 8 Maggio
Iniziano i primi problemi... in pratica, come indicato nella pagina del plugin di gwt, per poter usare map e list in gwt, bisogna specificare nel servizio di grails il tipo di ritorno di queste liste o mappe. In teoria questo lo si dovrebbe fare con @CollectionTypeArg e @MapTypeArg ma qui casca l'asino. Il mio ambiente non vede le classi per queste annotation... viene questo errore
"unable to find class for annotation"
Ho chiesto aiuto nella mailing list di Nabble Grails User
Vediamo se ottengo aiuto.

Edit
Pausa pranzo finita e per ora nessun aiuto. Ho cercato di arrangiarmi e qualcosa, forse, ho risolto. Smattendo a destra e a manca no trovato dove risiede la classe delle annotazioni del plug in di gwt... in pratica nella directory del porgetto, sotto plugin in, vi è la directory in cui vi sono due jar. Uno di questi è grails-gwt-util.jar
Ho importato questa libreria da IDEA, andando in Setting -> Project Setting -> Library -> Attach Classes -> e ho selezionato il jar di cui sopra.
Poi nel file in cui voglio usare le annotazioni ho importato il riferimento alle annotazioni con
import org.codehaus.groovy.grails.plugins.gwt.annotation.CollectionTypeArg
Non so se è il metodo corretto, nè perchè abbia dovuto farlo (presupponevo che il plugin di GWT almeno importasse le jar necessarie al suo funzionamento), ma sembra funzionare.

venerdì 2 maggio 2008

Si passa ad Intellij Idea

I problemi che ho esposto in questo post Lo Saffolding non funziona ho poi scoperto non dipendono dalla mia ignoranza in materia grails o java... ma dal plugin di eclipse per grails che funziona male... e corrompe i file e l'ambiente.

Quindi ho installato, per il momento la trial version, di Intellij Idea, (altro IDE per Java) che sembra avere un integrazione con grails molto molto migliore.

Installato intellij Idea, ho installato i plug in per grails e groovy (che si trovano praticamente comunque già elencati in IDEA) e di fatto ho tutto pronto per lavorare.
Da IDEA posso creare il progetto grails direttamente dall'IDE, senza quindi usare la riga di comando come ho fatto sino ad ora.

Abbiamo poi creato un repository di subversion... e qui magari creerò un post apposito per questo fantastico tools.

Ho ripreso poi, reiniziandolo da capo, il tutorial del libro Getting Started With Grails, ovviamente apportando le modifiche dovute al cambiamento di versione con grails, che mano a mano segnalo nel post apposito.

Ho usato, invece di MYSQL, sempre il database in Java che ha nativamente grails con se, con la differenza che invece di usare la memoria ram, uso file su disco... questo lo si ottiene semplicemente cambiando l'url di memorizzazione nel file DataSource.groovy da
url = "jdbc:hsqldb:mem:devDB"
a
url = "jdbc:hsqldb:file:devDB"

Una delle cose che attualmente pare non sia possibile fare direttamente da IDE e il comando grails generate-all per ripetere la compilazione dei controllers e per effettuare nuovamente lo scaffolding... questo attualmente lo sto eseguendo ancora da riga di comando