giovedì 27 marzo 2008

Maven

Già nelle scorse settimane mi era più volte capitato di leggere qualcosa su Maven... alcuni tutorial e progetti che ho analizzato lo richiedevano o facevano riferimento a questo tool, ma ho sempre evitato di "sapere cosa fosse".

Leggendo però il tutorial (anzi, vedendo la videolezione e relativi source) per l'integrazione tra GWT e Spring si è resa necessario lo studio, anche solo approssimativo, di cosa sia Maven.

Copio la definizione trovata in questa pagina:
http://www2.mokabyte.it/cms/article.run?articleId=S85-L5J-HP3-86O_7f000001_30480431_0844866c

Maven è un uno strumento "intelligente" e di alto livello per la gestione dei progetti in termini di compilazione, assemblaggio, test, deployment, e così via.
Sembrerebbe qualcosa di fin troppo evoluto per quello che sto facendo ora, anche se probabilmente diventerà interessante e utile per ciò che implementeremo. E dato che per comprendere ed utilizzare alcuni tutorial devo saperlo utilizzare, forse è il caso che me los tudi almeno superficialmente.

Attualmente sto leggendo questi articoli: Maven: best practices per il processo di build e di rilascio dei progetti in Java
Sembrano fatti bene, la prima pagina me la sono letta e più o meno capita tutta: è un introduzione a cosa sia Maven e una semplificata analisi di confronto Maven VS Ant (uno strumento di build di progetti Java)

mercoledì 26 marzo 2008

Alcuni libri da comprare

Qui un elenco di libri che dovremmo proprio acquistare. Alcuni di questi sono riuscito a recuperarli come pdf, anche se sarebbe il caso di averli stampati!

Amazon UK (normalmente la merce arriva in 10 giorni dal pagamento)
Spese di spedizione: 3,99 £ a spedizione (per libri) e 0,99 £ per libro

Effective Java: A Programming Language Guide
Pratici consigli (e codice) per programmare al meglio in Java


GWT In Action:
Sembrerebbe essere un ottimo libro per l'uso di GWT. Molti esempi e pezzi di codice da questo blog sono tratti da questo libro


GWT in Practice
Potrebbe essere un alternativa, consigliato per il modello MVC


Spring in Action
Altro libro della serie "In Action", per l'utilizzo di spting


Spring FrameWork 2.0
Potrebbe essere una valida alternativa, come libro per Springs


Java Persistence with Hibernate
Molto probabilmente Hibernate saràù il framwork che useremo per la persistenza dei dati




Amazon COM (normalmente la merce arriva in 15-20 giorni dal pagamento)
Spese di spedizione: 3,99 $ a spedizione e 3,99 $ per libro

Effective Java: A Programming Language Guide
Pratici consigli (e codice) per programmare al meglio in Java


GWT In Action:
Sembrerebbe essere un ottimo libro per l'uso di GWT. Molti esempi e pezzi di codice da questo blog sono tratti da questo libro


GWT In Practice
Potrebbe essere un alternativa, consigliato per il modello MVC


Spring in Action
Altro libro della serie "In Action", per l'utilizzo di spting


Professional Java Development with the Spring Framework
Potrebbe essere una valida alternativa, come libro per Springs


Java Persistence with Hibernate
Molto probabilmente Hibernate saràù il framwork che useremo per la persistenza dei dati

martedì 18 marzo 2008

Rilasciato un aggiornamento minore di GWT: GWT 1.4.62

Mentre sto un po' impazzendo per studiarmi almeno un pochino (giusto un infarinatura, prima di buttarmici seriamente) riguardo spring e la sua integrazione con gwt, leggo che è stata rilasciata ieri un aggiornamento, minore, a GWT.
http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/bd5cbb7a0d5b60aa
sembrano solo bugfix... ma dato che uno di questi sembra importante per problemi connessi a Firefox3, e dato che il rilascio di FF3 sembra imminente, forse è il caso di aggiornarsi...

Chissà quando verrà rilasciato GWT 1.5
In questo caso l'aggiornamento sarà decisamente più interessante, no?

giovedì 13 marzo 2008

Spring

Dopo aver analizzato un po' di licenze sui prodotti opensource, per verificare se in effetti potremo utilizzarli nel nostro lavoro, penso sia il caso di dedicare un po' di tempo allo studio di Spring, un framework osannato da molti per lo sviluppo di applicazioni professionali in Java, soprattutto in ambito web.

Questi gli articoli, presentazioni, tutorial, documentazione che sto analizzando

Altro su Spring:
  • https://springmodules.dev.java.net/ progetto parallelo a spring, con alcuni moduli da poter integrare a Spring, tra cui un Validator che support validazioni dichiarative (non so benissimo cosa significhi) per validare i dati di un forum (modulo: springmodules-validator.jar). Pagina 517 di "Spring in Action".
  • The Three Amigos : Maven, Spring and GWT sempre sull'integrazioe gwt psrings (vedi sotto) ma qui spiega anche maven2 (che non ho capito bene come si usa... e nemmeno bene cosa sia esattamente)

E alcuni tutorial e articoli sull'integrazione Spring e GWT

mercoledì 12 marzo 2008

Licenze

Analizzando e considerando la possibilità di utilizzare vari framework, librerie ed altro, rilasciati sotto vari tipi di licenze, è il caso di analizzarne una ad una, soprattutto per verificare se siano compatibili co il rilascio di lavoro commerciale e proprietario (come ovviamente la fdl è intenzionata a fare)

  • GNU General Public License (GPLv3)
    Non permette di usare software rilasciato con GPLv3 in prodotti commerciali, poichè comunque bisogna rilasciare tutto il progetto sotto GPLv3

  • GNU Affero General Public License
    Deriva dalla GPL, ma si intende per software usato in un network. Quindi non utilizzabile in software commerciale.
    Sono rilasciati sotto AGPL
    • Itext (dalla versione 5.X)

  • Apache Software License Version 2.0 (ASL 2.0)
    E' una licenza poco restrittiva. Permette l'uso del materiale rilasciato sotto di essa per lavori commerciali e proprietari. ???Non molto dissimile dalla BSD???
    E' compatibile con la licenza GPLv3 (ma non con GPL versione 2), quindi materiale rilasciato con ASL può essere incluso in materiale rilasciato sotto la GPLv3
    Si può ridistribuire materiale che contiene sofwtare rilasciato sotto ASL in ogni forma e mezzo a patto di
    • Allegare copia della licenza ASL 2.0
    • se si è modificato qualche file rilasciato sotto ASL bisogna specificarlo nel file stesso prima di redistribuirlo

    Sono rilasciati sotto ASL (e quindi inseribili/utilizzabili senza problemi nel nostro lavoro):
  • Mozilla Public License (MPL)
    Licenza per software libero, senza un forte permesso d'autore (poco restrittivo). E' però incompatibile con la GNU GPL.
    Contiene però una clausola che permette agli sviluppatori iniziali di associare al prodotto una nuova licenza. Generalmente quindi utilizzabile anche per prodotti commerciali e proprietari

    Sono rilasciati sotto MPL i seguenti prodotti
    • Echo2 (usabile e ridistribile con prodotti commerciali e propietari)



  • GNU Lesser General Public Licence (LGPL), v 3.0.
    Versione meno restrittiva della Gnu. Permette l'utilizzo di librerie/codice rilasciato in progetti commerciali e proprietari, a patto di indicarne la presenza, l'origine e la licenza stessa. Se nel progetto commerciale si usano modifiche a questo codice, si è obbligati, assieme al codice stesso, rilasciare le modifiche come codice open, indicando l'origine primaria e rilasciando (queste modifiche) con licenza LGPL. In sostenza, se useremo nel nostro progetto codice LGPL, dovremo indicarne la presenza... se dovremo modificare codice LGPL dovremo inserire nelle realease (anche commerciali e proprietarie) il sorgente di questo codice proprietario che dovremo rilasciare sotto LGPL. Se il codice LGPL viene usato "as is", non si è obbligati ad includerlo, basta farne riferimento nella licenza del programma proprietario rilasciato. Recentemente (2011) ho trovato un link che spiega un'ulteriore obbligo previsto dalla LGPL: bisogna permettere a chi usa il proprio software che comprende una libreria LGPL di poter usare un'eventuale nuova versione di tale libreria (http://www.gamedev.net/topic/80919-using-gpl-libraries-with-commercial-software/) (Non ho indagato bene su questo aspetto)

    Sono rilasciati sotto LGPL v 3.0
    • GWT-Ext
    • MyGWT
    • EXT JS, le librerie che servono per il funzionamento di GWT-EXT e MyGWT. In realtà esistono altri tipi di licenza per queste librerie, come quella commerciale.
    • Itext, sino alla versione 4.2 (poi passa alla AGPL)
    • Flyng-Saucer, che comprende IText 2.0.8 (quindi ancora LGPL)


  • Licenza BSD
    Licenza molto libera, esistente in diverse versione, che ne aumentano, o restingono, di poco la libertà.
    Le licenze BSD riflettono l'idea più ampia possibile del dono liberale: chiunque può fare ciò che meglio crede del programma rilasciato ed acquisito con l'unico dovere di citare l'autore (l'università di Berkeley); questo significa anche che chiunque può sviluppare in forma chiusa con una licenza proprietaria un programma BSD modificato, magari anche impedendo ai propri acquirenti di modificarlo e ridistribuirlo a loro volta.
    In realtà esiste anche una versione, chiamata "a tre clausole", che toglie la clausola della obbligatoria pubblicità verso l'università di Berkeley.

    Sono rilasciati sotto licenze di tipo BSD
    • Gwt-Ext-Ux, qualche estensione alle librerie Gwt-Ext

Spring / Hibernate e altri framework

Studiando per la rete il pattern MVC, sono incappato in alcuni framework che inizialmente avevamo considerato per lo sviluppo del nostro frameweork, tra i quali, Spring (http://www.springframework.org/), Hibernate (http://www.hibernate.org/) e altri framework che possono aiutarci nello sviluppo di ciò che vogliamo realizzare

  • Spring
    E' un framework a strati per la realizzazione di applicazioni Java/J2EE. Ha al suo interno diversi "moduli", tra cui una sorta di implementazione del pattern MVC e permette la facile integrazione di altri framework, come Hibernate.
    Un interessante articolo: Mokabyte Sprin e successivi

  • Hibernate
    è una piattaforma middleware open source per lo sviluppo di applicazioni Java che fornisce un servizio di Object-relational mapping (ORM), ovvero che gestisce la rappresentazione e il mantenimento su database relazionale di un sistema di oggetti Java.

  • GWT Server Library
    Una libreria che permette la facile integrazione tra GWT e Spring

MyGWT

Mygwt è un altra libreria/framework sviluppata sulla libreria ext (così come Gwt-Ext). Non sembra introdurre elementi grafici più interessanti di altre librerie (Gwt-Ext sembra appunto molto più completa ed interessante da questo punto di vista), ma implementa una forma embrionale di MVC (pattern Model View Controller) e quindi è interessante da analizzare, anche solo per vedere un implementazione di questo pattern.

MyGwt lo si scarica dal sito ufficiale, http://mygwt.net/, l'installazione è semplice ed immediata: basta scompattare il file dalla pagina download del sito in una cartella del proprio fyle system, per poi referenziarla nei progetti che si intende utilizzare.
Anche la configurazione di eclipse per l'utilizzo di MyGwt è semplice, e basta seguire i pochi passi proposti nel wiki della libreria (http://mygwt.net/learn/index.php?title=Configuring_Eclipse).
Per prima cosa è meglio creare un progetto nuovo, come Web -> Dinamic Web -> selezionando poi "dionamic web project using GWT" in "configuration".
Si deve poi importare tutto il framework GWT... per fare ciò possiamo aiutarci come al solito dal plugin GWT-Tooling. Basta quindi cliccare con il destro sul progetto appena creato, selezionare new -> other -> GWT -> GWT-Module
Poi In poche parole basta aggiungere il jar come libreria esterna (tasto destro sul progetto eclipse -> Build Path (oppure proprties) -> Configure Build path (oppure Java Build Path) -> Libraries -> Add External Jar -> selezionare il mygwt.jar cercandolo nel proprio file system dove si è scompattato prima il file scaricato dal sito. Bisogna poi fare attenzione che il mygwt.jar rimanga sempre più in altro, nella finestra "order and export" (sempre nella Java Bild Path), rispetto alla libreria normale di GWT. Questo perchè, se non ho capito male, MyGwt riscrive alcune classi di GWT.
Bisogna poi inserire nel file xml del modulo gwt questa riga
<inherits name="net.mygwt.ui.MyGWT" />

e inserire gli stili css nel file htm
<link rel="stylesheet" type="text/css" href="mygwt-all.css" />
<link rel="stylesheet" type="text/css" href="mygwt-all-gray.css" />

lunedì 10 marzo 2008

Model View Controller e altri design pattern

Sto analizzando ora, per la realizzazione del framwork da sviluppare, dei design pattern che possano essere adeguati.

Uno dei più importanti e utili, probabilmente, è il MVC (Model View Controller), la divisione tra gestione delle view (visioni, rappresentazioni all'utente), il controller (che intercetta le interazioni dell'utente, e chiede al model aggiornamenti di stato) e il model (business logic e data management)

Altro design pattern, che trovo consigliato nei vari tutorial di spring + gwt e simili, è una variante (credo) al MVC, cioè Hierarchical Model-View-Controller. Sembrerebbe un sistema più stratificato e "separatista" del MVC.
Alcuni tutorial:

giovedì 6 marzo 2008

GWT, JSTM e JSTM4GWT

In questa settimana sono riuscito nell'impresa di far dialogare GWT con JSTM4GWT (la versione per GWT di XSTM) e JSTM (la versione Java di XSTM.
Ho realizzato (e sto ampliando) un piccolo esempio per verificare se riesco ad ottenere da XSTM ciò che voglio.

L'idea di base è cercare di creare una form logica sul server, via Java, replicarla in GWT sul client, sia in via logica che come UI fisica sul browser e far comunicare il tutto in maniera semplice senza PRC.

Lo strato che fa la maggior parte del lavoro è proprio, ovviamente XSMT... si realizza la maschera (form) logica sul server via java... sul serve non serve una rappresentazione visiva (ma sarebbe immediato implementarla). Si condivide con il client questa maschera logica (attraverso appunto il dialogo JSTM e JSTM4GWT) e la si replica poi in GWT per realizzarla fisicamente sul browser, e viceversa

In questo modo ogni interazione sulla maschera fatta da un utente sul client viene replicata sulla maschera logica sul server, che può agire autonomamente in base ad ascoltatori che intercettano le variazioni della maschera logica, aggiorna la maschera logica che poi verrà replicata immediatamente sul client

Per ora, nell'esempio che ho fatto io, si replicano immediatamente sul client le modifiche fatte sulla maschera logica del server... ma non viceversa (bisogna sempre premere il tasto "commit"... questo anche per una scelta architetturale di JSTM), anche se il comportamento è non difficilmente modificabile (già parzialmente testato)

Il server riesce a capire se le modifiche sulla maschera logica sono avvenute internamente al server o dal client e quindi può agire diversamente di conseguenza.

A quanto pare sono riuscito ad ottenere ciò che volevamo... devo verificare alcuni dettagli ma forse siamo arrivati ad un livello di astrazione/interazione vicino a quello che vorremmo ottenere... anche perchè la realizzazione grafica del client può essere abbastanza facilmente svincolata da GWT e realizzata in uno dei qualsiasi 3 linguaggi supportati da XSTM: Java, .NET e appunto Java/GWT