Sono passati ormai più di due anni dal post che spiegava come . E’ arrivato il momento di aggiornarlo a Maven, con tutte le nuove dipendenze!
Un archetipo tutto nuovo
Ovviamente se si parla di migrare il progetto a Maven, non possiamo che partire da un archetipo. Cercando in rete, quello più interessante è lo Spring Knappsack archetype, anche se:
- non è aggiornato alle ultime versioni
- non è diviso in moduli
Tutte cose a cui si può rimediare piuttosto facilmente. Abbiamo quindi deciso di partire da questo archetipo, aggiustate le dipendenze e dividerlo in due moduli (web e services).
Il risultato è quindi un nuovo archetipo Maven che potete usare aggiornato ad oggi a JSF 2.2 (Mojarra 2.2.5), Spring 4.0.1, JPA 2.1 (Hibernate 4.3.1) e ottimizzato per Tomcat 7.
Creare un nuovo progetto
Come usarlo quindi? Per chi lavora con Eclipse, creare un nuovo progetto Maven è molto semplice: basta selezionare “Maven Project” dal menu dei nuovi progetti e scegliere l’archetipo come in figura:
Per chi è affezionato alla riga di comando invece, al posto di pochi click basta questo “semplice” comando:
mvn archetype:generate -DgroupId=mydomain -DartifactId=myproject -Dversion=0.0.1-SNAPSHOT -Dpackage=it.mypackage -DarchetypeGroupId=it.cosenonjaviste -DarchetypeArtifactId=jsf2-spring4-jpa2-archetype -DarchetypeVersion=1.0.3
Voilà! In pochi secondo è tutto configurato!
Struttura del progetto
Da dove cominciare quindi per capire com’è strutturato il nostro nuovo progetto? A differenza dell’archetipo originale “Spring Knappsack”, questo archetipo organizza le risorse in due moduli Maven:
- [projectName]-services: strato di servizi come l’implementazione della business logic e delle connessioni al database.
- [projectName]-web: strato di web presentation, composto da pagine e controller web.
Così possiamo organizzare le risorse in modo più strutturato.
Dove sono i file di configurazione?
File come il web.xml, faces-config.xml e il persistence.xml non hanno bisogno di presentazioni se avete bisogno di questo archetipo. Non ci sono grosse sorprese su dove trovarli:
- i primi due sono nel modulo web in myproject-web/src/main/webapp/WEB-INF
- il terzo nel modulo dei servizi in myproject-services/src/main/resources/META-INF
Il web.xml è configurato per lavorare con la specifica 3.0 di Servlet, il faces-config.xml per JSF 2.2 e il persistence.xml per JPA 2.1
. Da notare che in questi ultimi due file i namespaces sono cambiati:
...
...
Quello che è cambiato in realtà è il dominio: da java.sun.com
a xmlns.jcp.org
… e così si chiude uno degli ultimi riferimenti alla vecchia e cara Sun 🙁
E Spring?
La vera domanda è proprio questa: e i file di configurazione di Spring dove sono? Spring ha i suoi posti canonici e i suoi nomi canonici per i file di configurazione, ma non è così fiscale come i descrittori precedenti.
In Eclipse, se avete gli Spring Tools (che consiglio e che potete installare comodamente dal Marketplace), vi indica già la strada per i file di configurazione:
- myproject-web/src/main/webapp/WEB-INF/spring/application-context.xml: attiva la component scan per i package e include il file di configurazione del necessario per la connessione e la gestione del database.
- myproject-services/src/main/resources/spring/db.xml: definisce i bean come il dataSource o il transactionManager per la comunicazione con il database. Molto probabilmente questo file non cambierà mai: i dati variabili sono contenuti del file di properties associato (db.properties).
Metadati di Eclipse
Questo archetipo è stato creato a partire da un progetto Eclipse (Kepler nello specifico) per cui comprende i metadati per applicare la facet giuste per caratterizzare il progetto nel vostro workspace. Su alcune versioni di Eclipse è capitato che alla creazione del progetti vi fossero degli errori nell’applicazione del facet JPA 2.1: con un paio di project update dal menu Maven si risolve velocemente il problema!
Non resta quindi che augurarvi buon download!!