Nella prima parte abbiamo introdotto AppFuse e abbiamo fatto una veloce analisi tramite mockup dell'applicazione, ma non ci siamo ancora "sporcati le mani" con del codice e men che meno abbiamo visto in azione questo tool, cosa che faremo invece oggi.
AppFuse in azione
Lo stack applicativo che abbiamo scelto per la nostra applicazione JobBoard è così composto:
- Spring Framework : utilizzato per gestire la configurazione dell'applicazione ovvero risorse, componenti, dipendenze fra gli stessi, eccetera;
- Hibernate per gestire la persistenza dei dati;
- MySql come database;
- Spring MVC framework MVC
Sul sito ufficiale di AppFuse è presente la pagina QuickStart, che spiega come partire velocemente con un progetto AppFuse, fornendo anche un comodo strumento per selezionare le tecnologie da utilizzare nel progetto.
Il procedimento spiegato però non è perfetto, ci sono infatti alcuni problemi che si incontrano frequentemente e che, per ovvi motivi di spazio, non sono trattati direttamente nel Quickstart stesso; riportiamo quindi in questa sede i passi da seguire per arrivare ad un progetto funzionante.
Primo passo: assicuratevi di avere installato un JDK versione 5 (numerato come 1.5) oppure 6 (numerato come 1.6). Il progetto può tranquillamente girare sotto Java 7 (1.7), purtroppo però con questo JDK il processo di build ha ancora dei problemi causati dal plugin native2ascii-maven-plugin; questi problemi sono stati segnalati e il plugin è in corso di aggiornamento, nell'attesa però... cercheremo di accontentarci!
Ovviamente l'applicazione girerà normalmente in una JVM 1.7.
Il secondo passo è l'installazione di MySql 5: una qualsiasi versione recente (purché 5.x) andrà bene.
Alcune funzionalità richiedono l'utilizzo di un server SMTP, che di default è configurato come localhost, vedi file src/main/resources/mail.properties
.
Il nostro suggerimento è di utilizzare una versione di XAMPP adatta al vostro sistema (Unix/Win/Mac), questo vi consentirà di installare in un colpo sia MySql che il server SMTP Mercury. Consigliamo inoltre di disabilitare le porte 80
e 443
di Skype perché interferiscono con il server Apache.
Terzo passo: è caldamente consigliato l'utilizzo di un sistema per il controllo delle versioni (Version Control System - VCS) come Subversion (SVN), Git o Mercurial .
Le "coordinate" del progetto
Prima di creare la struttura del progetto dobbiamo stabilire groupId e artifactId del nostro progetto. In piena "filosofia Maven" infatti ogni progetto deve avere un'identificazione ben precisa all'interno di un repository maven, in modo da poter usufruire di vantaggi come gestione delle versioni, delle dipendenze, ereditarietà, e così via.
groupId solitamente coincide con il package di più alto livello nel progetto, mentre artifactId è un nome breve del progetto, adatto ad esempio per creare degli archivi (.zip, .jar, .war, ecc.) per la distribuzione. Nel nostro caso avremo quindi:
- groupId
it.html.jobboard
- artifactId
job-board
Apriamo dunque una shell ed eseguiamo questo comando:
Attenzione: deve stare su una sola riga!
Dopo aver lanciato il comando Maven job-board
Se state lavorando su Windows dovrete prima aprire il file di configurazione src/main/webapp/WEB-INF/applicationContext.xml
<entry key="compass.engine.connection" value="target/test-index" />
in:
<entry key="compass.engine.connection" value="ram://index" />
Un'altra modifica alla configurazione (non sempre necessaria) va fatta nel file pom.xml
<jdbc.username>
<jdbc.password>
amministrativo
È arrivato il momento di eseguire il check-in nel vostro VCS: fatelo ora
A questo punto il progetto è pronto per il suo primo build molte delle librerie necessarie non saranno presenti nel repository di Maven
>> mvn
Il progetto è configurato per eseguire in ordine queste fasi
- build;
- creazione del DB e popolamento con i dati di test;
- esecuzione dei test unitari;
- impacchettamento in un file job-board-1.0-SNAPSHOT.war
- lancio dell'applicazione in un Tomcat embedded;
- esecuzione dei test di integrazione;
- installazione del progetto nel repository.
Se uno solo di questi passi fallisce il processo di build si interrompe
Il progetto è ora pronto per essere importato in un IDE, è sufficiente che l'ambiente di sviluppo abbia il supporto a Maven: NetBeans e IDEA ce l'hanno già, Eclipse ha bisogno di plugin esterni come m2clipse
Proviamo il progetto maven
Quello che non abbiamo detto, e che forse è l'aspetto più intrigante di tutta la faccenda, è che AppFuse ha creato un'applicazione funzionante per noi, con tanto di gestione accessi, persistenza su database e configurazioni varie! Per provarla è sufficiente digitare il comando:
Che lancerà il webserver jetty integrato tramite l'apposito plugin di maven utilizzato all'interno del file pom.xml
Purtroppo spesso questo significa ottenere un deludente messaggio java.lang.OutOfMemoryError: PermGen space
>> set MAVEN_OPTS=-Xms256m -Xmx256m -XX:PermSize=256m -XX:MaxPermSize=256m
Il server Jetty sarà raggiungibile all'indirizzo:
Le prime schermate di prova
Di seguito visualizziamo finalmente alcune schermate dell'applicazione, tanto per avere una idea generale di dove siamo arrivati.
Abbiamo la pagina di login:
Una homepage personalizzata per l'utente loggato:
Una pagina di auto-registrazione:
e non finiscono qui! Sentitevi liberi di giocarci l'applicazione è già pronta per l'internazionalizzazione
Sviluppi
Nei prossimi articoli entreremo nel vivo dello sviluppo, utilizzando questa applicazione come base per sviluppare gli use case realizzati come mockup in fase di analisi.