SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
Università degli Studi di Trieste
                            Facoltà di Ingegneria

              Tesi di Laurea Triennale in Ingegneria Informatica




     Studio e Realizzazione di un SW per la gestione
      dei profili e delle versioni di applicazioni web
                      in ambiente JEE.




Relatore:                                               Laureando:
Prof. Maurizio FERMEGLIA                                Francesco FERONT




                           Anno Accademico: 2009/2010
Pag. 1/39




A me stesso.

Fanculo tutti!
1 - Introduzione                                                                                                        Pag. 2/39


Indice generale
1 - Introduzione.................................................................................................................4
2 - Sommario.....................................................................................................................5
3 - Analisi...........................................................................................................................6
    3.1 - Maven...................................................................................................................6
       3.1.1 - Struttura dei file Pom.xml.............................................................................7
       3.1.2 - SCM, Software Configuation Management..................................................8
       3.1.3 - Repository.....................................................................................................8
       3.1.4 - Property e Filtraggio delle Risorse..............................................................10
       3.1.5 - Profili...........................................................................................................11
    3.2 - Gestione delle Versioni.......................................................................................12
       3.2.1 - SVN, Subversion..........................................................................................13
    3.3 - Continuous Integration.......................................................................................13
       3.3.1 - Apache Continuum......................................................................................14
    3.4 - FTP, Modalità di Rilascio.....................................................................................15
    3.5 - Stesura dei Requisiti............................................................................................16
    3.6 - Realizzazione modello Concettuale E-R..............................................................18
       3.6.1 - Stesura dei Requisiti del Sistema Informativo............................................18
       3.6.2 - Glossario dei Termini...................................................................................19
       3.6.3 - Schema concettuale E-R..............................................................................20
4 - Realizzazione...............................................................................................................22
    4.1 - Interazione tra Sistemi e Ruolo degli Attori........................................................22
    4.2 - Diagrammi di sequenza.......................................................................................23
    4.3 - Progettazione Logica e Fisica della base dati......................................................25
    4.4 - Implementazione................................................................................................27
    4.5 - Tecnologie e Framework utilizzati.......................................................................28
       4.5.5 - Hibernate e Gestione della Persistenza......................................................29
    4.6 - Definizione dei Servizi.........................................................................................30
       4.6.1 - ScmService..................................................................................................30
       4.6.2 - CisService....................................................................................................31
    4.7 - Interfaccia...........................................................................................................32
       4.7.1 - Installazione e Configurazione....................................................................32
       4.7.2 - Esempio d'uso.............................................................................................34
    4.8 - Configurazione delle Applicazioni da Gestire.....................................................36
5 - Conclusioni.................................................................................................................38
6 - Riferimenti..................................................................................................................39
1 - Introduzione                                                                    Pag. 3/39




1 - INTRODUZIONE

In questo lavoro di tesi si tratterà delle tematiche relative alla gestione dei rilasci di
applicazioni web, basate sull'ambiente Java, da parte di una software house. In
particolare si affronta la questione delle personalizzazioni, dette anche profili, che
debbono essere realizzate sulle diverse applicazioni per venire incontro alle esigenze e
alle specifiche configurazioni dei clienti.

Tali personalizzazioni, alle volte anche significative, diventano un problema per le
software house che devono gestire i propri applicativi mantenendo al tempo stesso le
personalizzazioni già effettuate per i clienti. Il rischio in cui si incorre in assenza di un
adeguato sistema di tracciatura dei rilasci è di imbattersi in incongruenze, possibili bug
e disagi per le nuove implementazioni. Inoltre, la difficoltà che si riscontra nella
installazione di applicazioni fortemente personalizzabili, diviene tale da rendere
impossibile una netta separazione tra gli sviluppatori e gli addetti al cosiddetto
“deploy”, ovvero la procedura di messa in produzione, che necessiteranno
inevitabilmente di aiuti.

Come scopo finale, si vorrebbe realizzare una applicazione che permetta di gestire da
un lato la possibilità di definire un profilo di compilazione specifico per il dato cliente e
dall'altro mantenere traccia di quanto viene rilasciato e in che contesto.

Attualmente, soluzioni software che permettano la gestione dei profili esistono solo
all'interno di specifici ambienti di sviluppo, ovvero necessitano dell'adozione di
standard tecnologici e di implementazioni forzate nella realizzazione delle applicazioni.
Tale situazione implica che, la scelta di adottare una soluzione esistente, viene ad
essere subordinata all'attuale contesto di sviluppo della software house.

Per realizzare questo lavoro si è dunque proceduto alla analisi della situazione attuale
di una grossa azienda di produzione software, nello specifico INSIEL MERCATO (Insiel
Mercato S.p.A. con unico socio, località Padriciano 99 - AREA Science Park - 34149
Trieste). L'azienda è impegnata nello sviluppo di applicazioni per la pubblica
amministrazione e per la sanità, e fornisce i propri applicativi a diversi clienti per i qua li
è necessario effettuare delle differenziazioni anche notevoli. Il reparto tecnologico che
si è preso in considerazione è quello delle applicazioni web basate su ambiente java
JEE. Successivamente si è analizzato l'insieme di tecnologie utilizzate per gli sviluppi
delle suddette applicazioni, e tra queste si è ricercato il contesto comune che
permettesse la possibilità di realizzare delle personalizzazioni con una modalità
facilmente adottabile da tutti gli applicativi attualmente in rilascio, con il minimo sforzo
di adattamento. Il passo finale ha consistito nel realizzare una applicazione che si
occupasse di tenere traccia di tali personalizzazioni.
1 - Introduzione                                                                 Pag. 4/39

In concomitanza con la redazione di tale tesi, l'azienda stava procedendo
all'introduzione di Maven, strumento dichiarativo per la gestione dei progetti Java in
termini di compilazione del codice, distribuzione, documentazione e collaborazione del
team di sviluppo. L'uso di questo supporto è dunque diventato un vincolo di progetto.




2 - SOMMARIO

La seguente trattazione illustrerà l'analisi effettuata per la comprensione della tematica
che si intende affrontare con successiva elaborazione dei dati risultanti.

   •   Raccolta delle informazioni sulla situazione corrente della azienda per conto
       della quale si sta operando;
   •   Identificazione di Maven come principale punto in comune tra i diversi prodotti
       realizzati dalla azienda, avente le possibilità di gestire in modo opportuno i
       profili;
   •   Studio di Maven e delle modalità con cui questo effettua il filtraggio delle
       risorse statiche e di come tale operazione venga influenzata dalla definizione di
       un profilo;
   •   Interazione con sistemi di subversion;
   •   Studio dei concetti e delle possibilità offerte dai sistemi di Continuous
       Integration;
   •   Analisi del prodotto Apache Continuum e del suo utilizzo da remoto;
   •   Studio della possibilità di realizzazione di plugin personalizzati per Maven;
   •   Studio delle tecnologie necessarie alla realizzazione della interfaccia
       dell'applicativo;
   •   Studio del diagramma ER (Entità/Relazione) della base dati;

In un secondo tempo, verranno descritti i modi in cui tali considerazioni entrano in
gioco per lo sviluppo concreto dell'applicativo nella sua parte di business logic.

   •   Modellazione dell'applicativo ed integrazione con sistemi esterni;
   •   Definizione dei diversi moduli che compongono lo strato di Service;
   •   Progettazione logica della base dati e implementazione di Hibernate;
   •   Identificazione dei flussi applicativi, con particolare attenzione ai ruoli previsti
       per gli utenti;
   •   Modifiche richieste alle applicazioni che verranno interessate dal sistema di
       rilascio.

Una breve sezione riguarderà l'implementazione dell'indispensabile interfaccia per
l'interazione con l'utente.

   •   Sviluppo di una applicazione web per l'interazione tra utente e sistema;
   •   Illustrazione delle modalità di installazione e configurazione della applicazione;
2 - Sommario                                                                      Pag. 5/39

   •   Delucidazione sui casi d'uso più comuni per la applicazione.

Infine trovano posto le conclusioni tecniche-oggettive e personali raggiunte al termine
dello sviluppo. Per le note informative che esulano da questa trattazione si è
predisposta una appendice di approfondimento cui si fa svariate volte riferimento.




3 - ANALISI

Prima di procedere con la progettazione e la successiva realizzazione del progetto,
occorre stabilire a priori quelli che sono i requisiti che si vuole vengano rispettati nello
sviluppo. Per poter tracciare un ben definito elenco di requisiti è indispensabile
effettuare una analisi approfondita della problematica che si vuole affrontare, dello
stato dell'arte, delle tecnologie che sono disponibili al momento e delle possibili
soluzioni che vengono offerte da queste.

Il punto centrale da cui inizia questa analisi è il tool di sviluppo Maven. Tale strumento
è presente in tutti i progetti che si vuole gestire con il futuro applicativo e permette di
controllare un gran numero di funzionalità.

In questa analisi si cercherà dunque di analizzare Maven, mettendo in risalto le
modalità con cui questo tool riesce a interagire con gestione delle versioni, uso dei
profili e modalità di rilascio.




3.1 - Maven

Maven, può essere considerato principalmente come uno strumento per la gestione di
progetti software Java, in termini di compilazione del codice, testing, distribuzione,
documentazione e collaborazione del team di sviluppo. Si tratta dunque di un tentativo
di applicare pattern ben collaudati all'infrastruttura del build dei progetti cercando di
coprirne tutti gli ambiti.

Si tratta di promuovere la comprensione e la produttività del team coinvolto nello
sviluppo, fornendo un percorso chiaro all'utilizzo di best practice. Per questo motivo
Maven è definito, sinteticamente, tool per la gestione e comprensione dei progetti.
Esso è quindi contemporaneamente un insieme di standard, una struttura di repository
e un'applicazione che servono alla gestione e alla descrizione di progetti software. Esso
definisce un ciclo di vita standard per il building, il test e il deployment di file di
distribuzione Java.

Le caratteristiche di Maven fanno sì che diverse persone, anche inizialmente estranee
al progetto, possano lavorare insieme produttivamente senza dover trascorrere molto
3 - Analisi                                                                        Pag. 6/39

tempo per comprendere la struttura del progetto, il suo funzionamento, il processo di
build, etc. Tutti coloro che si sono trovati, almeno una volta nella loro vita, a dover
intervenire in progetti di grandi dimensioni in corso d'opera, sicuramente conoscono la
frustrazione causata da dover capire rapidamente l'interazione delle varie parti del
progetto, l'ordine e le dipendenze del processo di build, etc.

Le aree prese in considerazione da Maven sono: build, documentazione, reportistica,
gestione delle dipendenze, SCMs (Software Configuration Management), rilascio e
distribuzioni di nuove versioni. In effetti tutti i progetti, indipendentemente dal loro
dominio, dalla loro estensione e dalla tecnologia impiegata, presentano una serie di
necessità standard, quali ad esempio:
     • la conversione dei sorgenti in codici "eseguibili" (build);
     • la verifica (test);
     • l'assemblaggio;
     • la documentazione;
     • eventualmente il "dispiegamento" e la relativa configurazione (deployment).



3.1.1 - Struttura dei file Pom.xml

Uno dei principali componenti di Maven è il file pom.xml (Project Object Model,
modello ad oggetti del progetto). Esso mantiene i meta-dati del progetto memorizzati
utilizzando il formato xml.

Il file POM presenta una struttura piuttosto articolata e complessa. Tuttavia la maggior
parte delle funzionalità vengono implementate di base con un comportamento di
default che risulta essere perfettamente compatibile con la maggioranza dei progetti.
Inoltre un file POM personalizzato per un dato progetto può essere facilmente
riutilizzato per i successivi, con variazioni minime.

La complessità del POM che può inizialmente spaventare chi non è pratico
dell'ambiente, offre al tempo stesso un punto di forza per chi volesse alterare il
comportamento di Maven. Questa elevata versatilità sarà il punto di partenza per lo
sviluppo di questo progetto.

Tralasciando la struttura generica del POM, che esula da questa trattazione, nei
paragrafi successivi si affrontano con più attenzione, le parti che hanno una relazione
con quanto si discute in questa analisi. Si vedranno dunque le modalità di filtraggio
delle risorse, la definizione di property, la gestione dei profili e dei riferimenti a server
SCM e di rilascio.
3 - Analisi                                                                      Pag. 7/39

3.1.2 - SCM, Software Configuation Management

Il software per la gestione della configurazione, detto in inglese Software Configuation
Management o più semplicemente con l'acronimo SCM, è il software dedicato alla
gestione dei file sorgenti e risolvono il problema del Version Control.

Per la connessione con i sistemi SCM, Maven utilizza un proprio plug-in: Maven SCM.
Questo fornisce un'interfaccia comune per accedere alle diverse implementazioni SCM
(CVS, Subversion, IBM ClearCase, etc.).


<project>
...
  <scm>
    <connection>scm:svn:https://scmsever.com/myPrj/trunk/</connection>
    <developerConnection>
      scm:svn:https://subversion.scmsever.com/svn/myPrj/trunk/
    </developerConnection>
    <tag>trunk</tag>
    <url>scm:svn:https://scmsever.com/myPrj/trunk/myPrj</url>
  </scm>
...
</project>



Gli elementi SCM (listato appena visto) sono:
     • connection e developerConnection permettono di definire le diverse modalità
        di connessione al sistema di controllo del versionamento attraverso Maven. In
        particolare, mentre la connessione utilizzata da Maven (connection) richiede un
        accesso di sola lettura necessaria per permettere a Maven di localizzare e
        leggere il codice sorgente, la connessione degli sviluppatori
        (developerConnection), invece, richiede un accesso in lettura/scrittura. Per la
        connessione con i sistemi SCM, Maven utilizza un proprio plug-in: Maven SCM.
        Questo fornisce un'interfaccia comune per accedere alle diverse
        implementazioni SCM (CVS, Subversion, IBM ClearCase, etc.). Questa interfaccia
        è basata su una API ispirata al seguente formato URL: scm:[provider]:
        [provider_specific]. Nel listato riporato sopra è presente una configurazione
        contenente una connessione protetta (HTTPS) al server Subversion.
     • tag permette di specificare l'etichetta (la radice dell'SCM) dalla quale è possibile
        accedere al progetto.
     • url, permette di specificare l'indirizzo URL che permette di navigare il repository



3.1.3 - Repository

Mentre le sezioni repository del POM permettono di specificare le posizioni e le
modalità con cui Maven è in grado di effettuare il download dei vari manufatti
necessari al POM, questa sezione, all'interno dell'elemento distributionManager,
3 - Analisi                                                                       Pag. 8/39

permette di specificare dove e come memorizzare i manufatti del progetto, in fase di
deployment, all'interno del repository. Qualora la sezione snaposhotRepository non sia
definita, le impostazioni dell'elemento repository sono utilizzati anche per la
distribuzione di tipo snapshot. Ecco il listato che illustra le sezioni snapshotRepository e
Repository all'interno della sezione distributionManagement.


<project>
...
  <distributionManagement>
    <repository>
      <uniqueVersion>false</uniqueVersion>
      <id>corp1</id>
      <name>Corporate Repository</name>
      <url>scp://repo1/maven2</url>
      <layout>default</layout>
    </repository>
    <snapshotRepository>
      <uniqueVersion>true</uniqueVersion>
      <id>propSnap</id>
      <name>Propellors Snapshots</name>
      <url>sftp://propellers.net/maven</url>
      <layout>legacy</layout>
    </snapshotRepository>
    ...
  </distributionManagement>
...
</project>



Gli elementi di queste sezioni sono:
     • id, name: entrambi i campi servono per identificare il repository. Mentre il
        campo id è un identificatore univoco, il nome serve per rendere il campo
        leggibile.
     • uniqueVersion: è un attributo di carattere booleano il cui valore true serve ad
        incaricare Maven del versionamento dei vari manufatti pubblicati (generazione
        di un numero di versione univoco da associare ai manufatti memorizzati nel
        repository). Il valore false invece indica che la versione è definita come parte
        dell'indirizzo.
     • url: come lecito attendersi rappresenta l'informazione principale dell'elemento
        repository. Il formato URL, permette di specificare sia l'ubicazione sia il
        protocollo di trasporto da utilizzare per il trasferimento dei manufatti generati
        dal processo di build.
     • layout: come visto in precedenza permette di specificare la struttura del
        repository. In particolare: default indicata la struttura introdotta con Maven 2,
        mentre legacy rappresenta la struttura precedente.
3 - Analisi                                                                          Pag. 9/39

3.1.4 - Property e Filtraggio delle Risorse

Per filtraggio delle risorse si intende la sostituzione di variabili sui file di configurazione
costituenti il nostro progetto.

Per far si che le risorse vengano filtrate occorre abilitare il filtering nel tag resources. Se
il filtraggio delle risorse è attivo, prima di qualsiasi operazione di compilazione, il
framework si preoccupa di controllare tutti i file di risorsa (di default si trovano nella
cartella /src/main/resources) e di sostituirne le variabili con alcuni valori preimpostati.
Tali valori possono essere definiti come properties del progetto generico oppure, come
si vedrà in seguito, definiti a livello di profilo.


<project>
...
   <properties>
     <jdbc.driverclassname>com.mysql.jdbc.Driver</jdbc.driverclassname>
     <jdbc.url>jdbc:mysql://localhost:3306/development_db</jdbc.url>
     <jdbc.username>dev_user</jdbc.username>
     <jdbc.password>s3cr3tw0rd</jdbc.password>
   </properties>
   ...
   <build>
     <resources>
        <resource>
          <directory>src/main/resources</directory>
          <filtering>true</filtering>
        </resource>
     </resources>
 </build>



Come esempio si consideri un file di properties, facente parte di un dato progetto, in
cui vengono specificati i parametri di connessione verso la base dati. Tale file deve
essere configurato in modo differente in base al contesto di compilazione (macchina
locale dello sviluppatore, server di sviluppo, clienti). Il file che si troverà nei sorgenti del
progetto, sarà dunque formattato come indicato di seguito:


driver=${jdbc.driverclassname}
url=${jdbc.url}
username=${jdbc.username}
password=${jdbc.password}



Si può vedere che il file non è valorizzato ma, in fase di compilazione, verranno
utilizzate le properties definite nel POM del progetto per sostituire i placeholder
definiti da ${<chiave>}.
3 - Analisi                                                                        Pag. 10/39

3.1.5 - Profili

Una caratteristica introdotta a partire dalla versione 4.0 dei POM sono i profili. Queste
sezioni permettono di variare opportune impostazioni in funzione dell'ambiente di
build. Ciascun profilo include sia una sezione opzionale dedicata all'attivazione (una
sorta di trigger per un profilo) sia un insieme di variazioni da apportare al POM qualora
il relativo profilo venga attivato. Un esempio classico consiste nel far in modo che un
progetto realizzato per eseguire determinati test faccia riferimento ad un diverso
database a seconda dell'ambiente di esecuzione. Un altro esempio consiste nel far sì
che il sistema, a seconda della versione del JDK utilizzata, prelevi opportune
impostazione da diversi repository.


<project>
...
  <profiles>
    <profile>
    <id>test</id>
    <activation>...</activation>
    <build>...</build>
    <modules>...</modules>
    <repositories>...</repositories>
    <pluginRepositories>...</pluginRepositories>
    <dependencies>...</dependencies>
    <reporting>...</reporting>
    <dependencyManagement>...</dependencyManagement>
    <distributionManagement>...</distributionManagement>
    </profile>
  </profiles>
</project>



Gli elementi del profilo permettono di ridefinire elementi già presenti all'interno del
POM, pertanto ne ricopiano la struttura, come si può vedere nel precedente listato.

E' possibile riunire le possibilità di filtering delle risorse e gestione dei profili ottenendo
la possibilità di valorizzare differentemente determinate risorse statiche mediante l'uso
dei profili. Il risultato è un listato simile al seguente.


<project>
...
  <properties>
    <jdbc.driverclassname>com.mysql.jdbc.Driver</jdbc.driverclassname>
    <jdbc.url>jdbc:mysql://localhost:3306/development_db</jdbc.url>
    <jdbc.username>dev_user</jdbc.username>
    <jdbc.password>s3cr3tw0rd</jdbc.password>
  </properties>
  ...
  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
3 - Analisi                                                                    Pag. 11/39

        <filtering>true</filtering>
      </resource>
    </resources>
  </build>
  ...
  <profiles>
    <profile>
      <id>production</id>
      <properties>
        <jdbc.driverclassname>
             oracle.jdbc.driver.OracleDriver
        </jdbc.driverclassname>
        <jdbc.url>jdbc:oracle:thin:@proddb01:1521:PROD</jdbc.url>
        <jdbc.username>prod_user</jdbc.username>
        <jdbc.password>s00p3rs3cr3t</jdbc.password>
      </properties>
    </profile>
  </profiles>
</project>




3.2 - Gestione delle Versioni

Si definisce controllo delle versioni, la gestione di versioni multiple di un insieme di
informazioni. Viene usato prevalentemente nello sviluppo di progetti informatici per
gestire la continua evoluzione dei documenti digitali come il codice sorgente del
software. Le modifiche a questi file sono identificate incrementando un numero o un
codice associato ad essi, denominato "numero di versione", "etichetta di versione", o
semplicemente "versione", e sono etichettate con il nome della persona che ha
apportato la modifica.

Gli strumenti software per il controllo versione sono sempre più riconosciuti essere
necessari per la maggior parte dei progetti di sviluppo software.

Nell'ingegneria del software, il controllo delle versioni è costituito da qualunque pratica
che tenga traccia e permetta di controllare i cambiamenti al codice sorgente. Gli
sviluppatori software talvolta usano il controllo versione software anche per i file di
documentazione e di configurazione, oltre che per il codice sorgente. In teoria, il
controllo versione può essere applicato a qualunque tipo di registrazione di
informazioni.

Riassumendo, l'obiettivo fondamentale di tutti i software che si occupano del controllo
di versione è permettere a diversi sviluppatori di lavorare contemporaneamente su
diversi file o addirittura sullo stesso file, automatizzando compiti come:
    • tenere traccia di chi sta modificando che cosa;
    • unire le modifiche una volta complete;
    • segnalare eventuali conflitti;
    • tenere una copia di ogni precedente versione e fare in modo che sia facilmente
        recuperabile.
3 - Analisi                                                                    Pag. 12/39

3.2.1 - SVN, Subversion

Subversion (noto anche come SVN, che è il nome del suo client a riga di comando) è un
sistema di controllo versione progettato da CollabNet Inc. con lo scopo di essere il
naturale successore di CVS, oramai considerato superato.

Rispetto a CVS, Subversion introduce:
    • versionamento delle directories: con CVS il controllo di versione era applicato
       solo ai file, quindi le operazioni di copia e spostamento tra diverse directory non
       era gestito adeguatamente. Con Subversion viene tenuta traccia anche del
       contenuto di ogni singola directory e quindi lo spostamento di un file è a tutti gli
       effetti considerata una modifica, quindi rintracciabile e reversibile.
    • commits atomici: una serie di modifiche viene applicata solo in blocco – se
       anche solo una di esse crea errori, non viene applicata nessuna delle modifiche
       inviate. Questo evita la creazione di versioni incomplete che dovrebbero poi
       essere corrette a mano.
    • versionamento dei metadati: è possibile assegnare a file e directory delle
       proprietà personalizzate – dei veri e propri metadati – e mantenere lo storico
       anche delle modifiche a queste proprietà.
    • astrazione dal livello di rete: l'accesso dal client al repository (cioè al deposito
       centralizzato dei files) può avvenire attraverso il protocollo HTTP (sfruttando un
       apposito modulo di Apache), attraverso un apposito server standalone
       (SVNServe), o direttamente attraverso il filesystem (ma solo nel caso in cui il
       repository sia situato sulla stessa macchina). In tutti questi casi, i comandi e le
       operazioni fondamentali non cambiano, così come non cambia la struttura del
       repository e delle copie di lavoro locali.




3.3 - Continuous Integration

Con il termine Continuous Integration si intende una pratica di sviluppo software in cui
i membri di un team devono integrare il proprio lavoro con la linea di sviluppo
3 - Analisi                                                                    Pag. 13/39

principale. Con elevata frequenza si considera almeno una integrazione al giorno per
ogni membro del team. Tali integrazioni vengono verificate da una compilazione
automatica (che comprende anche l'esecuzione di test) per rilevare errori di
integrazione il più rapidamente possibile. Molti team trovano che questo approccio
porta a ridurre significativamente i problemi di integrazione e permette di sviluppare
software più rapidamente.

I sistemi che eseguono la integrazione continua, come Cruise Control, Apache
Continuum, TeamCity, e così via, sono ormai presenti in ogni progetto che si rispetti. Si
tratta di sistemi che, su richiesta, o ad intervalli predefiniti (ogni ora, durante le ore
notturne) eseguono il processo di build dell'intero progetto.



3.3.1 - Apache Continuum

Apache Continuum è uno dei principali applicativi open source per l'integrazione
continua progettato per build java. Una caratteristica che lo distingue da altri strumenti
similari è la gestione della sicurezza basata sui ruoli. Questa funzione fornisce il
controllo su quali aspetti della compilazione possono essere visti e gestiti dai diversi
utenti. Nel complesso, le caratteristiche principali sono simili a quelle appartenenti ad
altri applicativi di build management come Hudson e Cruise Control (gestione dei
rilasci, notifica e-mail, integrazione con i più diffusi strumenti di compilazione,
integrazione con Maven e integrazione con sistemi di SCM come SVN o CVS).

Lo strumento di interfaccia utente è web based, e dopo che il server è stato avviato si
può accedere da browser con un collegamento a http://localhost:8080/continuum.

Apache Continuum offre inoltre la possibilità di accedere alle proprie funzionalità
anche da remoto mediante un client XML-RPC. Il client è accessibile mediante un
collegamento a http://localhost:8080/continuum/xmlrpc.
3 - Analisi                                                                     Pag. 14/39




3.4 - FTP, Modalità di Rilascio

Il File Transfer Protocol (protocollo di trasferimento file o FTP), è un Protocollo per la
trasmissione di dati tra host basato su TCP. Gli obiettivi principali di FTP descritti nella
sua RFC ufficiale sono:
      • Promuovere la condivisione di file (programmi o dati);
      • Incoraggiare l'uso indiretto o implicito di computer remoti;
      • Risolvere in maniera trasparente incompatibilità tra differenti sistemi di
         stoccaggio file tra host;
      • Trasferire dati in maniera affidabile ed efficiente.

E' stato necessario interessarsi al protocollo FTP perché questo metodo di distribuzione
viene utilizzato per effettuare i rilasci in Insiel Mercato così come in moltissime altre
aziende ed è una delle principali modalità con cui vengono effettuati i trasferimenti di
file di grosse dimensioni.

Per permettere a Maven di interagire con un repository FTP, è necessario utilizzare una
particolare estensione del plugin wagon (utilizzato per prelevare e memorizzare file in
server remoti).


<project>
  ...
  <build>
    ...
    <extensions>
        <extension>
        <groupId>org.apache.Maven.wagon</groupId>
3 - Analisi                                                                       Pag. 15/39

        <artifactId>wagon-ftp</artifactId>
            <version>1.0-alpha-3</version>
        </extension>
    </extensions>
    ...
  </build>
  ...
</project>




3.5 - Stesura dei Requisiti

Nei paragrafi precedenti, si sono esaminate le tecnologie comuni alle applicazioni
attualmente sviluppate dalla azienda Insiel Mercato, e su queste si sono esaminate le
caratteristiche che sembrano poter offrire la soluzione al problema della gestione di
profili e versioni.

Il risultato dell'analisi si riassume nelle seguenti note:
      • Il tool Maven offre la possibilità di gestire dei profili in modo tale che, in fase di
          compilazione del progetto, gli attributi che vengono definiti nel file POM dei
          progetti, siano sovrascrivibili o comunque modificabili.
      • Un particolare punto di interesse nella nota precedente è costituito dalle
          properties, associazioni tra chiavi e valori configurabili da profilo, che possono
          essere utilizzate come placeholder all'interno delle risorse statiche dei progetti;
      • I profili maven, così come le properties, possono trovarsi anche esternamente al
          POM, ed essere iniettati durante la fase di compilazione.
      • Ad ogni versione di un progetto Maven, corrisponde un tag su SVN.
          Considerando che un tag non rappresenta una linea di sviluppo ma un punto (è
          dunque non è modificabile), non si può pensare di modificare i sorgenti del
          progetto per poter integrare il profilo all'interno del pom del progetto stesso.
      • Sulla base della nota precedente, si comprende come sia necessario che i profili
          vengano definiti all'interno di un sistema che sia indipendente dal gestore del
          versionamento. Tale sistema dovrà essere in grado, non solo di memorizzare i
          profili, ma anche di crearli e di poterli associare ai clienti.
      • Si riscontra che sia possibile utilizzare un sistema di Continuous Integration per
          eseguire delle operazioni Maven, che questi abbiano delle interfacce remote, e
          che Maven consenta di effettuare il deploy di un compilato su di un server FTP.

Le note sopra esposte definiscono non solo il risultato della analisi ma anche il
documento dei requisiti che l'applicativo che si vuole realizzare dovrà essere in grado di
soddisfare. In particolare, sulla base di quanto appena illustrato si vuole realizzare una
applicazione che sia in grado di:
   • creare dei profili di compilazione per progetti Maven in base alle configurazioni
       dei clienti;
   • memorizzare i suddetti profili, e le relazioni con progetti e clienti, in un archivio
       locale;
   • utilizzando i profili creati, far eseguire ad un motore di Continuous Integration il
3 - Analisi                                                                    Pag. 16/39

        rilascio dell'applicazione per il dato cliente su di un server FTP.


Dalla rielaborazione delle note e delle considerazioni appena esposte, si possono
enunciare i seguenti requisiti di progetto.

    •   L'applicazione dovrà essere in grado di distinguere la figura dello sviluppatore
        da quella dell'addetto alla messa in produzione e per ciascuno di essi fornire le
        funzionalità strettamente necessarie all'esercizio delle proprie funzioni. In tal
        modo si riusciranno ad isolare le responsabilità e meglio definire gli standard di
        esecuzione.
    •   Deve essere possibile, all'interno della applicazione, gestire le connessioni verso
        i build manager o continuous integration system, verificandone la corretta
        raggiungibilità e permettendo l'importazione di progetti da essi.
    •   Devono essere registrabili e modificabili le definizioni dei clienti.
    •   Deve essere possibile importare progetti dal sistema di integrazione continua e
        registrarli all'interno dell'applicativo oppure, viceversa, da questo, dopo aver
        inserito i parametri fondamentali, effettuare un export verso in sistema esterno.
    •   L'applicativo deve possedere, per ogni progetto, i riferimenti al posizionamento
        su di un sistema SCM.
    •   Dai riferimenti SCM di ogni progetto deve essere possibile effettuare il checkout
        dei sorgenti e da questi ricavare un template di definizione dei profili,
        caratteristico del progetto che si sta profilando.
    •   Sulla base dei template dei profili ed in associazione con progetto e cliente,
        deve essere possibile per l'utente, inserire i parametri che caratterizzano il
        profilo e salvare quest'ultimo nella base dati.
    •   L'applicazione deve poter far eseguire, ad un sistema di Continuous Integration
        remoto, un comando maven di compilazione di un progetto, in base al profilo
        voluto.
    •   Il risultato del comando di build indicato precedentemente deve avere come
        esito positivo, il deploy del compilato del progetto su di un server FTP. Tale
        compilato deve contenere la configurazione definita nel profilo.
    •   In seguito al deploy eseguito con successo, deve essere registrata l'esecuzione
        del rilascio per il dato cliente.
    •   Con una ulteriore interrogazione del sistema SCM, si preleva un secondo
        template che specifica le informazioni importanti che occorre registrare per il
        dato progetto.
    •   Sulla base del template sopra esposto, deve essere possibile registrare le
        informazioni ottenute dal cliente sull'ambiente specifico di installazione.
    •   L'applicativo deve permettere ricerche esaustive sulla base di progetti, versioni
        e clienti.
3 - Analisi                                                                   Pag. 17/39

3.6 - Realizzazione modello Concettuale E-R

Essendo necessario l'utilizzo di una base dati per immagazzinare le informazioni
relative a progetti, clienti, profili e rilasci, si rende indispensabile effettuare una
corretta progettazione della stessa. Un errore durante questa fase si ripercuoterebbe
sull'intero progetto, mentre una base di dati ben progettata risulterebbe invece più
efficiente e semplificherebbe lo sviluppo delle applicazione.

Il procedimento per la progettazione di una base di dati segue i seguenti passi:
     • Stesura dei requisiti del sistema informativo in linguaggio naturale;
     • Glossario ed identificazione delle entità;
     • Realizzazione del Modello ER.

Nel capitolo relativo alla realizzazione, vengono effettuati ulteriori elaborazioni dello
schema E-R fino a giungere allo schema logico e fisico.



3.6.1 - Stesura dei Requisiti del Sistema Informativo

Si produce una prima versione dei requisiti in linguaggio naturale, raggruppando frasi
descrittive relative a categorie diverse di dati.

Frasi riguardanti i progetti:
    • Un Continuous Integration System viene utilizzato per il testing dei progetti.
    • I progetti vengono compilati da un Continuous Integration System.
    • I progetti sono versionati su un gestore di versioni SCM.
    • Gli sviluppatori depositano i progetti su SCM e Continuous Integration System.

Frasi relative ai Profili:
    • Il profilo è la definizione della personalizzazione di un progetto.
    • Ogni cliente può volere uno o più profili dello stesso progetto.
    • Ogni compilazione viene eseguita con un certo profilo.
    • Il template del profilo viene preso dai sorgenti versionati del progetto.
    • I deployer sono incaricati della realizzazione dei profili.

Frasi relative al build:
    • Il build viene fatto dal Continuous Integration System.
    • Tutti i progetti sono gestiti dal Continuous Integration System.
    • Il Continuous Integration System riceve i profili dall'applicazione rudra.
    • Un build riuscito può essere rilasciato al cliente.
    • I deployer installano i progetti dai clienti.

Frasi relative al cliente:
    • Il cliente richiede il rilascio di un progetto;
3 - Analisi                                                                         Pag. 18/39

      •   Il progetto rilasciato viene configurato per il cliente.
      •   Al cliente viene installato il prodotto richiesto.

Frasi relative ai rilasci:
    • Se un build da esito positivo può essere installato.
    • Ad ogni installazione corrisponde un buildn di un progetto.
    • Le installazioni vengono fatte dai deployer.

Frasi relative agli sviluppatori:
    • Ogni progetto ha uno o più sviluppatori.
    • Gli sviluppatori utilizzano il server SCM per versionare i progetti.
    • Gli sviluppatori monitorano i progetti con i CIS.

Frasi relative ai deployer:
    • I deployer creano i profili per i progetti.
    • Una installazione corrisponde all'intervento di un deployer su un progetto.



3.6.2 - Glossario dei Termini

Analizzando le frasi espresse in linguaggio naturale, raggruppate per categoria di dati, si
possono identificare dei termini ricorrenti e tra questi delle relazioni.


   Termine                           Descrizione                           Collegamenti
Progetto          Prodotto venduto dalla azienda                     Sviluppatore, Profilo,
                                                                     CIS, SCM, Build
Profilo           Personalizzazione del progetto per il cliente      Deployer, Progetto,
                                                                     Cliente, Build
Cliente           Colui a cui si vende il progetto personalizzato Installazione, Profilo
Sviluppatore Sviluppa i Progetti                                     Progetto
Deployer          Crea i profili e installa i progetti compilati     Profilo, Installazione
Build             Rappresenta il processo con cui si crea il         Progetto, Profilo,
                  compilato e i suoi risultati                       Installazione
CIS               Continuous Integration Systema                     Progetto
Installazione Installazione del progetto compilato presso il Deployer, Cliente, Build
              cliente
SCM               Sistema di versionamento                           Progetto
3 - Analisi                                                                    Pag. 19/39

3.6.3 - Schema concettuale E-R

Traducendo il glossario in uno schema concettuale basato su Entità e Relazioni si
ottiene lo schema indicato di seguito. Questo è lo schema scheletro dal quale si parte
con l'analisi che condurrà alla realizzazione dello schema E-R vero e proprio.




Dallo schema precedente si può immediatamente evincere che le entità Sviluppatore e
Deployer possono essere considerate delle specializzazioni della figura del Dipendente.

Inoltre dalla comprensione delle frasi in linguaggio naturale e dalla analisi del contesto
costituito dal sistema informativo che si vuole realizzare, è possibile definire sia gli
attributi che le singole entità (e nel caso, anche le relazioni) debbano avere, sia la
cardinalità con cui le entità entrano in relazione tra loro. Questa analisi è di
fondamentale importanza per lo sviluppo dello schema logico e fisico che si andrà a
svolgere nel capitolo relativo alla realizzazione della base dati.
3 - Analisi                                                               Pag. 20/39

Di seguito viene quindi esposto lo schema Entità-Relazione su cui si è strutturata la
base dati del progetto Rudra.
4 - Realizzazione                                                              Pag. 21/39




4 - REALIZZAZIONE

In considerazione del fatto che l'applicativo in realizzazione necessiterà di essere
utilizzato da diverse figure professionali (sviluppatori, addetti alla messa in produzione,
project manager, ecc..) e in diversi contesti (tutti però localizzabili all'interno
dell'azienda), si è deciso di realizzare una applicazione web. Tale scelta permette una
maggiore semplicità d'uso ed è ottimizzata per l'uso intranet. Essa viene inoltre
giustificata dagli stretti legami con altri applicativi ad uso intranet come sistemi di
continuous integration, repository per il controllo delle versioni, repository maven
interni, server ftp per i rilasci, server ldap per le autenticazioni e sistemi di issue
tracking.




4.1 - Interazione tra Sistemi e Ruolo degli Attori

Si vuole realizzare una applicazione capace di gestire un elenco di progetti posti in un
sistema di Continuous Integration. Di tali progetti deve essere possibile ricavare i
riferimenti al server di versionamento SCM da cui a sua volta si estraggono le
informazioni necessarie alla compilazione di un profilo. Successivamente, in base alle
informazioni appena fornite dal sistema SCM, si procede alla creazione di un nuovo
profilo per il dato cliente associandolo al progetto stesso all'interno del database
dell'applicazione Rudra. Tale profilo viene poi utilizzato per la generazione del progetto
personalizzato da parte del sistema di continuous integration che provvederà al deploy
del compilato finale su di un server FTP per la distribuzione. Inoltre si vuole registrare
l'operazione di rilascio, arricchendola di informazioni specifiche del progetto e del
cliente, all'interno del database.

In tutto questo processo, gli utenti che compiono le diverse attività possono essere
categorizzati in due attori principali, ovvero:

    •   Sviluppatore: Colui che sviluppa e mantiene i progetti. Stabilisce i rilasci delle
        versioni e in concomitanza con questi eventi si occupa di realizza i tag sul
        sistema di versionamento e porre l'applicazione appena versionata su un
        sistema di continuous integration.
    •   Deployer: Colui che si occupa della messa in produzione degli applicativi. Non
        ha competenze riguardo al funzionamento dei progetti o delle tecnologie con
        cui questi sono stati realizzati. Si occupa di ricavare dai clienti le informazioni
        sul contesto in cui le applicazioni si troveranno ad operare, a configurarle
        adeguatamente realizzando un profilo, e a porre in produzione il compilato
        che potrà ricavare dal server FTP.
4 - Realizzazione                                                               Pag. 22/39




Come si può facilmente vedere dallo schema precedente, grazie all'introduzione di
questo meccanismo di rilascio, non esistono punti in comune tra la figura dello
sviluppatore e quella del deployer.




4.2 - Diagrammi di sequenza

I due attori principali che interagiranno con il progetto Rudra saranno dunque i
deployer e gli sviluppatori. Per ciascuno di essi sono stati realizzati i seguenti diagrammi
di sequenza.

Per la figura dello sviluppatore si hanno le seguenti operazioni:

   •   registrazione di un sistema di Continuous Integration;
   •   richiesta del progetti importabili dal CIS;
   •   importazione di un progetto.
4 - Realizzazione                                             Pag. 23/39




Per la figura del deployer si hanno le seguenti operazioni:

   •   richiesta form per creazione del profilo;
   •   salvataggio profilo;
   •   richiesta rilascio;
   •   salvataggio dettaglio rilascio.
4 - Realizzazione                                                          Pag. 24/39




4.3 - Progettazione Logica e Fisica della base dati

Non esistono DBMS in grado di operare direttamente sui concetti di schemi E-R. Risulta
quindi necessario tradurli in altri schemi di dati chiamati logico relazionali. Questa
traduzione può essere eseguita in modo semi-automatico seguendo una determinata
serie di operazioni da eseguire.

Il progetto logico presenta in generale una soluzione standard determinabile in modo
semplice e diretto. A seconda dei casi, sono però disponibili anche soluzioni
alternative, che possono rivelarsi più o meno convenienti. In queste occasioni si deve
tenere conto dell’efficienza dello schema logico risultante e delle operazioni da
effettuare (derivanti da flussi e processi).
4 - Realizzazione                                                                 Pag. 25/39

Per ottenere lo schema logico della base dati è necessario dunque procedere a
trasformazioni e traduzioni dello schema E-R seguendo le fasi indicate di seguito:
    • Eliminazione delle generalizzazioni;
    • Identificazione delle chiavi primarie;
    • Traduzione di entità e associazioni in schemi di relazioni.

Durante la realizzazione di queste fasi, si devono compiere le seguenti valutazioni, che
permettono una ottimizzazione dello schema logico risultante dalla interpretazione
dello schema E-R:
    • Previsioni sulla natura e la frequenza delle operazioni;
    • Valutazioni quantitative sui volumi di dati (entità, associazioni, percentuali di
        copertura di gerarchie, percentuali di valori nulli).

In tutti quei casi in cui sono possibili scelte alternative, occorre prestare la dovuta
attenzione alle seguenti considerazioni, molto spesso intuitive:
    • Le proprietà logiche sono comunque primarie rispetto ai motivi di efficienza;
    • Tenere sulla stessa entità informazioni che verranno di frequente consultate
        insieme;
    • Tenere su entità separate informazioni che verranno consultate separatamente;
    • Limitare l’incidenza di valori nulli per attributi opzionali.

L'applicazione delle regole e delle considerazioni precedenti, porta alla stesura delle
seguenti trasformazioni da applicare allo schema E-R:
    • la relazione esistente tra CIS e Progetto ha cardinalità 1,1 sulla seconda entità, e
        su questa viene accorpata;
    • vista la cardinalità 1,1 della relazione tra SCM e Progetto, la prima entità viene
        completamente accorpata nella seconda (questa soluzione facilita anche la
        gestione dei progetti e della interfaccia.);
    • gli argomenti del Profilo, essendo molteplici, vengono estratti dall'entità Profilo
        e posizionati in una tabella a parte di cui il profilo è chiave esterna (tabella
        Profile_Property);
    • le dipendenze aggiuntive che possono essere richieste da un Profilo possono
        essere molteplici, quindi vengono estratte dall'entità Profilo e posizionate in
        una tabella a parte di cui l'identificativo del profilo è chiave esterna (tabella
        Profile_Dependency);
    • gli argomenti della Installazione, essendo molteplici, vengono estratti dall'entità
        Installazione e posizionati in una tabella a parte di cui l'identificativo del profilo
        è chiave esterna (tabella Release_Property);
    • in tutti i casi in cui la cardinalità con cui una entità entra in relazione è 1,1, la
        relazione viene accorpata alla entità stessa;
    • l'identificazione delle chiavi primarie segue le indicazioni già fornite nello
        schema E-R realizzato.

All'interno degli applicativi sviluppati da Insiel Mercato, la gestione di autenticazioni ed
autorizzazioni degli utenti, viene svolta da un kernel di funzionalità, condiviso tra tutte
le applicazioni, che utilizza una base dati condivisa. Trattandosi dunque di una
4 - Realizzazione                                                              Pag. 26/39

soluzione già esistente e proprietaria, essa non viene trattata in questo studio.

Il risultato di tutte queste considerazioni, applicate sullo schema entità-Relazione che è
stato elaborato nella fase di Progettazione di questa tesi, ha prodotto lo schema logico
che ha come prodotto il seguente schema fisico.




4.4 - Implementazione

L'applicazione web che si intende sviluppare presenterà tre diversi strati software.

Il primo, ovvero lo stato dei controller sarà recettivo delle richieste http inviate dal
browser dell'utente. Si occuperà dunque di verificare autenticazioni ed autorizzazioni e
di fornire successivamente una risposta in base a ciò che verrà restituito dai servizi che
verranno di volta in volta richiamati.

Il secondo strato è uno strato di servizi che rispettano il pattern meglio noto come
Facade. Tali servizi permettono di nascondere la complessità delle operazioni ai
controller o agli altri servizi chiamanti. In tal modo la complessità di certe operazioni
complesse viene ad essere concentrato in un punto, ed essendo i servizi realizzati nel
modo più generico e astratto possibile, il codice sviluppato è estremamente riusabile.
4 - Realizzazione                                                               Pag. 27/39


Il terzo strato è quello dedicato alla persistenza. Tale livello non è sempre presente.
Grazie all'utilizzo di un motore di persistenza come Hibernate, non sarebbe necessario
realizzare uno strato che si occupi delle operazioni di scrittura e lettura sulla base dati,
ma in quei casi in cui le operazioni di lettura e scrittura possono essere più complesse e
magari ricorrenti all'interno dei diversi servizi, allora si preferisce estrarre il codice
relativo e posizionarlo in una classe di appoggio.

L'interazione con i servizi di versionamento SCM e di Continuous Integration CIS sono
gestiti da appositi servizi.




4.5 - Tecnologie e Framework utilizzati

Per la realizzazione dell'applicazione web si è scelto di utilizzare il framework Spring.
Spring è un framework open source per lo sviluppo di applicazioni che rappresenta al
momento il tentativo più riuscito per semplificare lo sviluppo di applicazioni
"enterprise" di una certa complessità nell'ambito Java. Spring interpreta nel modo
migliore i nuovi modelli di programmazione definiti dall'IoC e dall'AOP e permette di
raggiungere un livello di disaccoppiamento degli strati applicativi impedito invece dalla
natura "invasiva" della tecnologia EJB.

Si prestano molto bene alla realizzazione del progetto anche alcuni sotto-framework di
spring, quali Spring MVC (per la miglior gestione del pattern Model-View-Control) e
Spring Security (per la gestione di autenticazioni e autorizzazioni).

Le view che vengono restituite agli utenti sono generate grazie alle JSP la cui
composizione viene realizzata dal framework Tiles 2. Tiles permette agli sviluppatori di
4 - Realizzazione                                                                 Pag. 28/39

definire frammenti di pagine jsp che possono essere assemblate in una pagina
completa in fase di esecuzione. Questi frammenti possono essere utilizzati come
semplice include, al fine di ridurre la duplicazione degli elementi di pagina comuni o
incorporato in altri frammenti al fine di sviluppare una serie di modelli riutilizzabili.



4.5.5 - Hibernate e Gestione della Persistenza

Hibernate (talvolta abbreviato in H8) è 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.

L'obiettivo di Hibernate è quello di esonerare lo sviluppatore dall'intero lavoro relativo
alla persistenza dei dati. Hibernate si adatta al processo di sviluppo del programmatore,
sia se si parte da zero sia se da un database già esistente. Hibernate genera le chiamate
SQL e solleva lo sviluppatore dal lavoro di recupero manuale dei dati e dalla loro
conversione, mantenendo l'applicazione portabile in tutti i database SQL. Hibernate
fornisce una persistenza trasparente per "Plain Old Java Object".

In questa tesi sono state utilizzate le annotazioni JAXB per personalizzare la mappatura
tra oggetti java, i cosiddetti POJO, e tabelle e altri costrutti SQL. Di seguito si riporta un
esempio di classe di modello mappata con hibernate.


...
@SuppressWarnings("serial")
@Entity
@Table(name = "project", uniqueConstraints = {
@UniqueConstraint(columnNames={"group_id","artifact_id","version"})})
public class Project implements Serializable {

       @Id
       @GeneratedValue(strategy = GenerationType.IDENTITY)
       protected Long id;

       @Column(name = "group_id", nullable = false)
       protected String groupId;

       @Column(name = "artifact_id", nullable = false)
       protected String artifactId;

       @Column(name = "version", nullable = false)
       protected String version;

       @Column(name = "scm_url", nullable = false)
       protected String scmUrl;

       @Column(name = "scm_username", nullable = false)
       protected String scmUsername;

       @Column(name = "scm_password", nullable = false)
4 - Realizzazione                                                              Pag. 29/39

       protected String scmPassword;

       @ManyToOne(cascade = CascadeType.ALL)
       protected ContinuousIntegrationSystem cis;

       @Column(name = "cis_project_id")
       protected Long cisProjectId;

       @Column(name = "invalidate", nullable = false)
       protected Boolean invalidate = false;
...
// getter e setter per gli attributi della classe



L'annotazione @Entity permette ad Hibernate di riconoscere la classe come
referenziata su di una tabella, l'annotazione @Id ne riconosce la chiave primaria e
l'annotazione @ManyToOne permette di definire una chiave esterna con un'altra
entità.




4.6 - Definizione dei Servizi

Come già detto,

4.6.1 - ScmService

Per interagire con il sistema di versionamento è necessario l'utilizzo di librerie esterne.
Dopo una ricerca a riguardo si è scelto, per la particolare implementazione del servizio
verso un sistema SVN, di utilizzare il progetto SVNKit. Tale libreria, tra l'altro, è anche
utilizzata dallo stesso IDE Eclipse utilizzato per la realizzazione del progetto.

Per importare la libreria nel progetto occorre definire nel POM la seguente dipendenza

...
<dependency>
    <groupId>org.tmatesoft.svnkit</groupId>
    <artifactId>svnkit</artifactId>
    <version>1.3.5</version>
</dependency>
...



Per poter effettuare delle operazioni sul server SVN occorre conoscerne i riferimenti. Si
riporta un esempio della connessione vai codice effettuata nel servizio.

...
DAVRepositoryFactory.setup();

SVNUpdateClient client = new SVNUpdateClient(
   SVNWCUtil.createDefaultAuthenticationManager(
4 - Realizzazione                                                            Pag. 30/39

    project.getScmUsername(), project.getScmPassword()),
    SVNWCUtil.createDefaultOptions(true));

client.doCheckout(SVNURL.parseURIDecoded(scmUrl), outputFolder,
    SVNRevision.UNDEFINED, SVNRevision.HEAD, SVNDepth.INFINITY, true);
...




4.6.2 - CisService

Per connettersi remotamente ad una istanza di Continuum, occorre utilizzare il jar
continuum-xmlrpc-client. Tale libreria può essere aggiunta come dipendenza al file pom
del progetto.

...
  <dependency>
    <groupId>org.apache.continuum</groupId>
    <artifactId>continuum-xmlrpc-client</artifactId>
    <version>1.4.0</version>
  </dependency>
...


Per connettersi a Continuum con il client xml-rpc indicato è necessario utilizzare la
classe ContinuumXmlRpcClient, ilcui costruttore ha 3 parametri:
     • url, l'url a cui risponde il listener xmlrpc (http://host:port/continuum/xmlrpc);
     • user, l'username dell'utente di Continuum;
     • password, la password dell'utente.


Per ottenere l'istanza del client nel codice java:

...
URL url = new URL( "http://localhost:8080/continuum/xmlrpc" );
ContinuumXmlRpcClient client = new ContinuumXmlRpcClient( url,
    username, password );
...


Per ottenere la lista dei progetti:

...
List<ProjectSummary> ps = client.getProjects( projectGroupId );
...


Per richiamare il build di un progetto:


...
client.buildProject( project.getId(), buildDefinitionId );
...
4 - Realizzazione                                                               Pag. 31/39




4.7 - Interfaccia

L'interfaccia dell'applicativo è stata realizzata per permettere una facile interazione con
l'utente. I contesti in cui si possono eseguire le operazioni sono rappresentati come dei
Tab nella parte alta dell'interfaccia. Per ognuno di essi è presente un sotto menu che
permette l'esecuzione delle varie operazioni. Un barra di navigazione permette di
tenere traccia della posizione in cui ci si trova durante la navigazione della applicazione.


4.7.1 - Installazione e Configurazione

L'installazione dell'applicativo Rudra è piuttosto semplice. La sola cosa da fare è creare
uno schema di database vuoto (in questa tesi si è utilizzata una base dati postgres, ma
con pochissimi accorgimenti si può utilizzareq ualsiasi altro RDMS di uso comune) e
indicarne i riferimenti nel file:

rudraWEB-INFapplication-configpersistence-config.xml

...
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
       destroy-method="close">
    <property name="driverClassName" value="org.postgresql.Driver" />
    <property name="url" value="jdbc:postgresql:rudra" />
    <property name="username" value="rudra" />
    <property name="password" value="rudra" />
</bean>
...


Una volta mandato in esecuzione l'application server (in questo caso si è utilizzato
Tomcat), hibernate si occuperà di realizzare lo schema della base dati sulla base degli
oggetti di modello che sonos tati mappati con le annotazioni JAXB.

Per poter configurare l'applicazione in modo corretto, l'amministratore o uno degli
sviluppatori deve accedere alla applicazione effettuando il login.
4 - Realizzazione                                                            Pag. 32/39

La prima operazione che deve essere eseguita è l'associazione di un sistema di
Continuous Integration. In questa schermata devono essere inseriti i parametri relativi
alla connessione remota.




Una volta associato il CIS, occorre importare i progetti da voler rilasciare. Questi
vengono selezionati da una lista di tutti i progetti attualmente disponibili sul sistema
CIS precedente mente associato.




La pressione del tasto importa, permette di registrare i progetti sulla base dati e di
gestirli dal progetto Rudra.
4 - Realizzazione                                                                Pag. 33/39

4.7.2 - Esempio d'uso

Le seguenti schermate indicano le operazioni che normalmente vengono eseguite dal
gruppo degli addetti ai rilasci. Una volta eseguito il login, essi verificano l'esistenza del
cliente oppure, in caso contrario, lo inseriscono.




Si procede dunque alla generazione del profilo richiesto indicando esplicitamente il
progetto che si vuole rilasciare e il relativo cliente.




Una volta che viene eseguita la registrazione del profilo, si procede con il checkout del
progetto dal repository SCM su cui esse viene versionato, e se ne estrae il template di
definizione dei placeholder.
4 - Realizzazione                                                              Pag. 34/39

Il template ottenuto contiene le indicazioni relative ai nomi delle chiavi dei placeholder
e la descrizione di che cosa indicano. Tali template e tali note descrittive note sono
state preventivamente indicati dagli sviluppatori prima di effettuare il tag del progetto.




Il deployer si occupa dunque di compilare il form per l'immissione dei dati del profilo
aiutato in questa operazione dalla descrizione. Successivamente vedrà l'elenco dei
profili, indicato di seguito, dal quale potrà richiedere la compilazioen remota e il deploy
sul server di rilascio FTP.




Nell'arco di pochi secondi o pochi minuti a seconda della dimensione dle progetto e
delle performance della rete intranet, sarà possibile interrogare il server FTP sul quale
si troverà il file compilato richiesto.
4 - Realizzazione                                                               Pag. 35/39




4.8 - Configurazione delle Applicazioni da Gestire

Affinché un progetto gestito tramite Maven possa usufruire del sistema descritto in
questa tesi, esso deve necessariamente:
    • avere i propri file sorgenti versionati su di un sistema SCM raggiungibile;
    • i file sorgenti sopra indicati debbono essere sottoposti ad un sistema di
       Continuous Integration raggiungibile;
    • avere nella root dei sorgenti, la definizione dei template che permettono la
       definizione dei Profili e dei Rilasci;

Per poter utilizzare la generazione dei profili in Rudra, è necessario che i progetti da
gestire abbiano al loro interno un file di definizione dei placeholder da sostituire in fase
di compilazione. Il file viene posto nella root del progetto a pari livello del pom.xml e si
chiama:

/rudra-profile-template.properties

In questo file sono presenti le coppie di chiave/descrizione, come illustrato
nell'esempio:
4 - Realizzazione                                                              Pag. 36/39

rudra.db.driver=Se si utilizza un database Oracle, utilizzare il 
  driver Oracle Thin JDBC: "oracle.jdbc.driver.OracleDriver". 
rudra.db.url=Contiene il nome della sorgente di dati nella forma 
  "jdbc:oracle:thin:@<server_name>:<db_port>:<SID>". Il valore 
  server_name è l'indirizzo IP o il nome assegnato dall'admin 
  del sistema al server di database. Il valore SID è l'identificatore
  del sistema di database. Se sullo stesso sistema sono in esecuzione
  più database Oracle, usare SID per distinguerli. Ad esempio, se il 
  server si chiama Aristotle, la porta del database è la 1343 e su 
  tale server è stato definito un SID di database di nome patients, 
  immettere il seguente valore: 
  "jdbc:oracle:thin:@Aristotle:1343:patients".
rudra.db.username=Nome utente per l'accesso alla base dati.
rudra.db.password=Password dell'utente.


Nel file pom devono essere presenti le seguenti sezioni. Tali modifiche vengono
eseguite per poter utilizzare le modalità di deploy effettuate tramite il plugin wagon.

Definizione del repository per il deploy:

<distributionManagement>
  <repository>
    <id>ftp-repository</id>
    <url>ftp://192.168.1.104/home/ftp-user</url>
  </repository>
</distributionManagement>


Estensione del plugin Wagon:

<extensions>
  <extension>
    <groupId>org.apache.maven.wagon</groupId>
    <artifactId>wagon-ftp</artifactId>
    <version>1.0-beta-6</version>
  </extension>
</extensions>



NB: Nello sviluppo di questo progetto si è deciso di utilizzare il plugin wagon di Maven
per il deploy degli artefatti compilati sul server FTP, mediante l'estensione del plugin.
Tale soluzione è efficace e stabile, in quanto wagon è un plugin intrinseco di Maven.

Si consideri però che l'utilizzo un plugin così specifico, può causare dei fastidi nel
momento in cui si volessero effettuare delle modifiche alle modalità di deploy. Basti
pensi al caso in cui si volesse far deployare il file compilato in una determinata cartella
con allegati altri documenti, come guida all'installazione, o file connessi che comunque
non riguardano il build in se stesso.

In tal caso la soluzione che si consiglia di adottare è di realizzare un plugin
personalizzato di Maven da far in seguito inglobare in tutti i POM dei progetti gestiti
tramite Rudra.
4 - Realizzazione                                                                    Pag. 37/39




5 - CONCLUSIONI

L'obiettivo di questo lavoro di tesi era la realizzazione di una sistema software che
permettesse di tenere traccia dei rilasci degli applicativi java web prodotti da una
azienda di sviluppo software, con particolare attenzione alla gestione dei profili. Tale
obiettivo si può dire pienamente raggiunto. Inoltre, grazie al fatto che i progetti della
azienda erano gestiti con il tool Maven, si è potuto, non solo tenere traccia dei profili
dei vari clienti, ma anche crearli direttamente nell'applicativo, grazie a dei template
predefiniti. La successiva interazione con un sistema di Continuous Integration ha poi
permesso che la generazione dei compilati da rilasciare avvenisse in modo
assolutamente automatico e trasparente per il personale incaricato della messa in
produzione.

Il progetto realizzato vanta una quasi immediata integrazione all'interno di un sistema
preesistente, se dotato di gestione delle versioni (Subversion) e testing mediante
meccanismi di continuous integration (Apache Continuum). Ciò significa che è possibile
adottarlo senza incorrere nella necessità di dover riscrivere parti di applicazioni
preesistenti o di dover modificare ambienti di lavoro. Il suo sviluppo ha richiesto
notevole studio delle tecnologie disponibili e una buona conoscenza degli ambienti e
delle meccaniche aziendali. La realizzazione vera e propria del progetto ha comportato
alcuni mesi. Grazie al fatto che il codice è stato strutturato a moduli tra loro
indipendenti, e che questi sono stati resi il più generici possibile, una buona parte del
codice sviluppato nella parte di “business intelligence” può essere facilmente
riutilizzato per altre applicazioni che ne debbano aver bisogno.

Personalmente, ritengo che tale progetto si possa definire di grande utilità per le
aziende di produzione software, sia per quanto riguarda l'organizzazione e la
reperibilità dei dati relativi a clienti ed installazioni, sia in termini di tempi e costi dovuti
ad installazione, sviluppo e manutenzione dei prodotti. Nel caso specifico, ritengo che
l'adozione di questo applicativo all'interno di Insiel Mercato, permetterà grandi
evoluzioni nella fase di “deploy” dei prodotti, evitando i vari disagi in cui spesso capita
di incorrere. Consentirà inoltre di aumentare velocità ed efficacia della manutenzione e
di nuovi sviluppi, avendo sottomano una chiara mappatura della situazione della
distribuzione dei progetti tra i clienti.

Il progetto realizzato verrà ulteriormente sviluppato nel corso dei prossimi mesi ed è
prevista la sua entrata in produzione presso il laboratorio tecnico di sviluppo per la
pubblica amministrazione di Insiel Mercato, nel mese di settembre. Prima del suo uso
effettivo, se ne vogliono aumentare le caratteristiche, integrandovi il sistema di
gestione di autenticazioni e autorizzazioni presente nell'azienda, fornendo l'interazione
con JIRA (un sistema di issue tracking, ovvero un software che ha il compito di
raccogliere e mantenere organizzate tutte le informazioni e le segnalazioni relative a
gestione, sviluppo e programmazione di una applicazione), un servizio di invio notifiche
5 - Conclusioni                                                                  Pag. 38/39

tramite posta digitale e personalizzare maggiormente quello che è al momento il
comportamento dell'applicativo nella fase di deploy del compilato sul server ftp.

A completamento di questo lavoro di tesi vengono considerati i sorgenti del software
realizzato, nonché i documenti specifici della applicazione, consistenti nella guida di
installazione e configurazione.




6 - RIFERIMENTI

[1] Maven,
http://maven.apache.org/

[2] Luca Vetti Tagliati, Mokabyte
"Maven: best practice applicate al processo di build e rilascio di progetti Java. "

[3] Apache Continuum,
http://continuum.apache.org/

[4] SVNKit, subversion for java,
http://svnkit.com/

[5] Maven Wagon FTP,
http://maven.apache.org/wagon/wagon-providers/wagon-ftp/

[6] Martin Fowler, “Continuous Integration”,
http://martinfowler.com/articles/continuousIntegration.html

[7] Controllo Versioni,
http://it.wikipedia.org/wiki/Controllo_versione

[8] Guida Subversion, Francesco Abeni, programmazione.html.it

[9] The Best Continuous Integration Tools,Vlad Kofman
http://www.developer.com/

[10] Hibernate, Wikipedia
http://it.wikipedia.org/wiki/Hibernate

[11] Hibernate, Reference
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/

Mais conteúdo relacionado

Destaque

Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...artemedea
 
Konposizioaz
KonposizioazKonposizioaz
Konposizioaztakolo
 
Paisagens Suiças
Paisagens SuiçasPaisagens Suiças
Paisagens Suiçasdrvahl
 
Progetto e realizzazione di un sistema per la caratterizzazione su larga scal...
Progetto e realizzazione di un sistema per la caratterizzazione su larga scal...Progetto e realizzazione di un sistema per la caratterizzazione su larga scal...
Progetto e realizzazione di un sistema per la caratterizzazione su larga scal...guest85785c7
 
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...Stefano Costanzo
 
GWT vs CSS3
GWT vs CSS3GWT vs CSS3
GWT vs CSS3GWTcon
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 

Destaque (8)

Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
 
Konposizioaz
KonposizioazKonposizioaz
Konposizioaz
 
Paisagens Suiças
Paisagens SuiçasPaisagens Suiças
Paisagens Suiças
 
Progetto e realizzazione di un sistema per la caratterizzazione su larga scal...
Progetto e realizzazione di un sistema per la caratterizzazione su larga scal...Progetto e realizzazione di un sistema per la caratterizzazione su larga scal...
Progetto e realizzazione di un sistema per la caratterizzazione su larga scal...
 
Cultural studies
Cultural studiesCultural studies
Cultural studies
 
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
 
GWT vs CSS3
GWT vs CSS3GWT vs CSS3
GWT vs CSS3
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 

Semelhante a Studio e realizzazione di un sw per la gestione dei profili e delle versioni di applicazioni web in ambiente jee

Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...
Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...
Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...daniel_zotti
 
Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...
Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...
Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...ciakana
 
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...Luca Bressan
 
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...Filippo Muscolino
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGiacomoZorzin
 
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...ozacchig
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 
Progettazione e sviluppo di un applicativo web e della sua base di dati per l...
Progettazione e sviluppo di un applicativo web e della sua base di dati per l...Progettazione e sviluppo di un applicativo web e della sua base di dati per l...
Progettazione e sviluppo di un applicativo web e della sua base di dati per l...dudinestefano
 
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...DamianoRavalico
 
Openfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistemsOpenfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistemsLorenzo Stacchio
 
Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...
Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...
Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...Saverio Tonon
 
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...Francesco Cucari
 
Progettazione di una base di dati in ambiente office per un reparto di neurol...
Progettazione di una base di dati in ambiente office per un reparto di neurol...Progettazione di una base di dati in ambiente office per un reparto di neurol...
Progettazione di una base di dati in ambiente office per un reparto di neurol...thediabloz
 
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...Davide Ciambelli
 
Documentazione progetto software - IoSegnalo
Documentazione progetto software - IoSegnaloDocumentazione progetto software - IoSegnalo
Documentazione progetto software - IoSegnaloMarco Vaiano
 
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...Grogdunn
 

Semelhante a Studio e realizzazione di un sw per la gestione dei profili e delle versioni di applicazioni web in ambiente jee (20)

Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...
Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...
Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...
 
Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...
Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...
Progettazione e realizzazione di un nodo di elaborazione per il rilevamento d...
 
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
Estrazione automatica di informazioni da documenti cartacei: progetto e reali...
 
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptx
 
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
Porting evolutivo dell'applicazione per la gestione dei dispositivi del Comun...
 
TesiEtta
TesiEttaTesiEtta
TesiEtta
 
Tesi_Adamou
Tesi_AdamouTesi_Adamou
Tesi_Adamou
 
Tesi_Adamou
Tesi_AdamouTesi_Adamou
Tesi_Adamou
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 
Tesi Todone
Tesi TodoneTesi Todone
Tesi Todone
 
Progettazione e sviluppo di un applicativo web e della sua base di dati per l...
Progettazione e sviluppo di un applicativo web e della sua base di dati per l...Progettazione e sviluppo di un applicativo web e della sua base di dati per l...
Progettazione e sviluppo di un applicativo web e della sua base di dati per l...
 
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
 
Openfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistemsOpenfisca Managing Tool: a tool to manage fiscal sistems
Openfisca Managing Tool: a tool to manage fiscal sistems
 
Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...
Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...
Realizzazione di un applicativo per la gestione di fogli di lavoro integrato ...
 
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
 
Progettazione di una base di dati in ambiente office per un reparto di neurol...
Progettazione di una base di dati in ambiente office per un reparto di neurol...Progettazione di una base di dati in ambiente office per un reparto di neurol...
Progettazione di una base di dati in ambiente office per un reparto di neurol...
 
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
Tesi Specialistica - L'ottimizzazione delle risorse della Grid di EGEE median...
 
Documentazione progetto software - IoSegnalo
Documentazione progetto software - IoSegnaloDocumentazione progetto software - IoSegnalo
Documentazione progetto software - IoSegnalo
 
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
 

Último

Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 

Último (9)

Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 

Studio e realizzazione di un sw per la gestione dei profili e delle versioni di applicazioni web in ambiente jee

  • 1. Università degli Studi di Trieste Facoltà di Ingegneria Tesi di Laurea Triennale in Ingegneria Informatica Studio e Realizzazione di un SW per la gestione dei profili e delle versioni di applicazioni web in ambiente JEE. Relatore: Laureando: Prof. Maurizio FERMEGLIA Francesco FERONT Anno Accademico: 2009/2010
  • 2. Pag. 1/39 A me stesso. Fanculo tutti!
  • 3. 1 - Introduzione Pag. 2/39 Indice generale 1 - Introduzione.................................................................................................................4 2 - Sommario.....................................................................................................................5 3 - Analisi...........................................................................................................................6 3.1 - Maven...................................................................................................................6 3.1.1 - Struttura dei file Pom.xml.............................................................................7 3.1.2 - SCM, Software Configuation Management..................................................8 3.1.3 - Repository.....................................................................................................8 3.1.4 - Property e Filtraggio delle Risorse..............................................................10 3.1.5 - Profili...........................................................................................................11 3.2 - Gestione delle Versioni.......................................................................................12 3.2.1 - SVN, Subversion..........................................................................................13 3.3 - Continuous Integration.......................................................................................13 3.3.1 - Apache Continuum......................................................................................14 3.4 - FTP, Modalità di Rilascio.....................................................................................15 3.5 - Stesura dei Requisiti............................................................................................16 3.6 - Realizzazione modello Concettuale E-R..............................................................18 3.6.1 - Stesura dei Requisiti del Sistema Informativo............................................18 3.6.2 - Glossario dei Termini...................................................................................19 3.6.3 - Schema concettuale E-R..............................................................................20 4 - Realizzazione...............................................................................................................22 4.1 - Interazione tra Sistemi e Ruolo degli Attori........................................................22 4.2 - Diagrammi di sequenza.......................................................................................23 4.3 - Progettazione Logica e Fisica della base dati......................................................25 4.4 - Implementazione................................................................................................27 4.5 - Tecnologie e Framework utilizzati.......................................................................28 4.5.5 - Hibernate e Gestione della Persistenza......................................................29 4.6 - Definizione dei Servizi.........................................................................................30 4.6.1 - ScmService..................................................................................................30 4.6.2 - CisService....................................................................................................31 4.7 - Interfaccia...........................................................................................................32 4.7.1 - Installazione e Configurazione....................................................................32 4.7.2 - Esempio d'uso.............................................................................................34 4.8 - Configurazione delle Applicazioni da Gestire.....................................................36 5 - Conclusioni.................................................................................................................38 6 - Riferimenti..................................................................................................................39
  • 4. 1 - Introduzione Pag. 3/39 1 - INTRODUZIONE In questo lavoro di tesi si tratterà delle tematiche relative alla gestione dei rilasci di applicazioni web, basate sull'ambiente Java, da parte di una software house. In particolare si affronta la questione delle personalizzazioni, dette anche profili, che debbono essere realizzate sulle diverse applicazioni per venire incontro alle esigenze e alle specifiche configurazioni dei clienti. Tali personalizzazioni, alle volte anche significative, diventano un problema per le software house che devono gestire i propri applicativi mantenendo al tempo stesso le personalizzazioni già effettuate per i clienti. Il rischio in cui si incorre in assenza di un adeguato sistema di tracciatura dei rilasci è di imbattersi in incongruenze, possibili bug e disagi per le nuove implementazioni. Inoltre, la difficoltà che si riscontra nella installazione di applicazioni fortemente personalizzabili, diviene tale da rendere impossibile una netta separazione tra gli sviluppatori e gli addetti al cosiddetto “deploy”, ovvero la procedura di messa in produzione, che necessiteranno inevitabilmente di aiuti. Come scopo finale, si vorrebbe realizzare una applicazione che permetta di gestire da un lato la possibilità di definire un profilo di compilazione specifico per il dato cliente e dall'altro mantenere traccia di quanto viene rilasciato e in che contesto. Attualmente, soluzioni software che permettano la gestione dei profili esistono solo all'interno di specifici ambienti di sviluppo, ovvero necessitano dell'adozione di standard tecnologici e di implementazioni forzate nella realizzazione delle applicazioni. Tale situazione implica che, la scelta di adottare una soluzione esistente, viene ad essere subordinata all'attuale contesto di sviluppo della software house. Per realizzare questo lavoro si è dunque proceduto alla analisi della situazione attuale di una grossa azienda di produzione software, nello specifico INSIEL MERCATO (Insiel Mercato S.p.A. con unico socio, località Padriciano 99 - AREA Science Park - 34149 Trieste). L'azienda è impegnata nello sviluppo di applicazioni per la pubblica amministrazione e per la sanità, e fornisce i propri applicativi a diversi clienti per i qua li è necessario effettuare delle differenziazioni anche notevoli. Il reparto tecnologico che si è preso in considerazione è quello delle applicazioni web basate su ambiente java JEE. Successivamente si è analizzato l'insieme di tecnologie utilizzate per gli sviluppi delle suddette applicazioni, e tra queste si è ricercato il contesto comune che permettesse la possibilità di realizzare delle personalizzazioni con una modalità facilmente adottabile da tutti gli applicativi attualmente in rilascio, con il minimo sforzo di adattamento. Il passo finale ha consistito nel realizzare una applicazione che si occupasse di tenere traccia di tali personalizzazioni.
  • 5. 1 - Introduzione Pag. 4/39 In concomitanza con la redazione di tale tesi, l'azienda stava procedendo all'introduzione di Maven, strumento dichiarativo per la gestione dei progetti Java in termini di compilazione del codice, distribuzione, documentazione e collaborazione del team di sviluppo. L'uso di questo supporto è dunque diventato un vincolo di progetto. 2 - SOMMARIO La seguente trattazione illustrerà l'analisi effettuata per la comprensione della tematica che si intende affrontare con successiva elaborazione dei dati risultanti. • Raccolta delle informazioni sulla situazione corrente della azienda per conto della quale si sta operando; • Identificazione di Maven come principale punto in comune tra i diversi prodotti realizzati dalla azienda, avente le possibilità di gestire in modo opportuno i profili; • Studio di Maven e delle modalità con cui questo effettua il filtraggio delle risorse statiche e di come tale operazione venga influenzata dalla definizione di un profilo; • Interazione con sistemi di subversion; • Studio dei concetti e delle possibilità offerte dai sistemi di Continuous Integration; • Analisi del prodotto Apache Continuum e del suo utilizzo da remoto; • Studio della possibilità di realizzazione di plugin personalizzati per Maven; • Studio delle tecnologie necessarie alla realizzazione della interfaccia dell'applicativo; • Studio del diagramma ER (Entità/Relazione) della base dati; In un secondo tempo, verranno descritti i modi in cui tali considerazioni entrano in gioco per lo sviluppo concreto dell'applicativo nella sua parte di business logic. • Modellazione dell'applicativo ed integrazione con sistemi esterni; • Definizione dei diversi moduli che compongono lo strato di Service; • Progettazione logica della base dati e implementazione di Hibernate; • Identificazione dei flussi applicativi, con particolare attenzione ai ruoli previsti per gli utenti; • Modifiche richieste alle applicazioni che verranno interessate dal sistema di rilascio. Una breve sezione riguarderà l'implementazione dell'indispensabile interfaccia per l'interazione con l'utente. • Sviluppo di una applicazione web per l'interazione tra utente e sistema; • Illustrazione delle modalità di installazione e configurazione della applicazione;
  • 6. 2 - Sommario Pag. 5/39 • Delucidazione sui casi d'uso più comuni per la applicazione. Infine trovano posto le conclusioni tecniche-oggettive e personali raggiunte al termine dello sviluppo. Per le note informative che esulano da questa trattazione si è predisposta una appendice di approfondimento cui si fa svariate volte riferimento. 3 - ANALISI Prima di procedere con la progettazione e la successiva realizzazione del progetto, occorre stabilire a priori quelli che sono i requisiti che si vuole vengano rispettati nello sviluppo. Per poter tracciare un ben definito elenco di requisiti è indispensabile effettuare una analisi approfondita della problematica che si vuole affrontare, dello stato dell'arte, delle tecnologie che sono disponibili al momento e delle possibili soluzioni che vengono offerte da queste. Il punto centrale da cui inizia questa analisi è il tool di sviluppo Maven. Tale strumento è presente in tutti i progetti che si vuole gestire con il futuro applicativo e permette di controllare un gran numero di funzionalità. In questa analisi si cercherà dunque di analizzare Maven, mettendo in risalto le modalità con cui questo tool riesce a interagire con gestione delle versioni, uso dei profili e modalità di rilascio. 3.1 - Maven Maven, può essere considerato principalmente come uno strumento per la gestione di progetti software Java, in termini di compilazione del codice, testing, distribuzione, documentazione e collaborazione del team di sviluppo. Si tratta dunque di un tentativo di applicare pattern ben collaudati all'infrastruttura del build dei progetti cercando di coprirne tutti gli ambiti. Si tratta di promuovere la comprensione e la produttività del team coinvolto nello sviluppo, fornendo un percorso chiaro all'utilizzo di best practice. Per questo motivo Maven è definito, sinteticamente, tool per la gestione e comprensione dei progetti. Esso è quindi contemporaneamente un insieme di standard, una struttura di repository e un'applicazione che servono alla gestione e alla descrizione di progetti software. Esso definisce un ciclo di vita standard per il building, il test e il deployment di file di distribuzione Java. Le caratteristiche di Maven fanno sì che diverse persone, anche inizialmente estranee al progetto, possano lavorare insieme produttivamente senza dover trascorrere molto
  • 7. 3 - Analisi Pag. 6/39 tempo per comprendere la struttura del progetto, il suo funzionamento, il processo di build, etc. Tutti coloro che si sono trovati, almeno una volta nella loro vita, a dover intervenire in progetti di grandi dimensioni in corso d'opera, sicuramente conoscono la frustrazione causata da dover capire rapidamente l'interazione delle varie parti del progetto, l'ordine e le dipendenze del processo di build, etc. Le aree prese in considerazione da Maven sono: build, documentazione, reportistica, gestione delle dipendenze, SCMs (Software Configuration Management), rilascio e distribuzioni di nuove versioni. In effetti tutti i progetti, indipendentemente dal loro dominio, dalla loro estensione e dalla tecnologia impiegata, presentano una serie di necessità standard, quali ad esempio: • la conversione dei sorgenti in codici "eseguibili" (build); • la verifica (test); • l'assemblaggio; • la documentazione; • eventualmente il "dispiegamento" e la relativa configurazione (deployment). 3.1.1 - Struttura dei file Pom.xml Uno dei principali componenti di Maven è il file pom.xml (Project Object Model, modello ad oggetti del progetto). Esso mantiene i meta-dati del progetto memorizzati utilizzando il formato xml. Il file POM presenta una struttura piuttosto articolata e complessa. Tuttavia la maggior parte delle funzionalità vengono implementate di base con un comportamento di default che risulta essere perfettamente compatibile con la maggioranza dei progetti. Inoltre un file POM personalizzato per un dato progetto può essere facilmente riutilizzato per i successivi, con variazioni minime. La complessità del POM che può inizialmente spaventare chi non è pratico dell'ambiente, offre al tempo stesso un punto di forza per chi volesse alterare il comportamento di Maven. Questa elevata versatilità sarà il punto di partenza per lo sviluppo di questo progetto. Tralasciando la struttura generica del POM, che esula da questa trattazione, nei paragrafi successivi si affrontano con più attenzione, le parti che hanno una relazione con quanto si discute in questa analisi. Si vedranno dunque le modalità di filtraggio delle risorse, la definizione di property, la gestione dei profili e dei riferimenti a server SCM e di rilascio.
  • 8. 3 - Analisi Pag. 7/39 3.1.2 - SCM, Software Configuation Management Il software per la gestione della configurazione, detto in inglese Software Configuation Management o più semplicemente con l'acronimo SCM, è il software dedicato alla gestione dei file sorgenti e risolvono il problema del Version Control. Per la connessione con i sistemi SCM, Maven utilizza un proprio plug-in: Maven SCM. Questo fornisce un'interfaccia comune per accedere alle diverse implementazioni SCM (CVS, Subversion, IBM ClearCase, etc.). <project> ... <scm> <connection>scm:svn:https://scmsever.com/myPrj/trunk/</connection> <developerConnection> scm:svn:https://subversion.scmsever.com/svn/myPrj/trunk/ </developerConnection> <tag>trunk</tag> <url>scm:svn:https://scmsever.com/myPrj/trunk/myPrj</url> </scm> ... </project> Gli elementi SCM (listato appena visto) sono: • connection e developerConnection permettono di definire le diverse modalità di connessione al sistema di controllo del versionamento attraverso Maven. In particolare, mentre la connessione utilizzata da Maven (connection) richiede un accesso di sola lettura necessaria per permettere a Maven di localizzare e leggere il codice sorgente, la connessione degli sviluppatori (developerConnection), invece, richiede un accesso in lettura/scrittura. Per la connessione con i sistemi SCM, Maven utilizza un proprio plug-in: Maven SCM. Questo fornisce un'interfaccia comune per accedere alle diverse implementazioni SCM (CVS, Subversion, IBM ClearCase, etc.). Questa interfaccia è basata su una API ispirata al seguente formato URL: scm:[provider]: [provider_specific]. Nel listato riporato sopra è presente una configurazione contenente una connessione protetta (HTTPS) al server Subversion. • tag permette di specificare l'etichetta (la radice dell'SCM) dalla quale è possibile accedere al progetto. • url, permette di specificare l'indirizzo URL che permette di navigare il repository 3.1.3 - Repository Mentre le sezioni repository del POM permettono di specificare le posizioni e le modalità con cui Maven è in grado di effettuare il download dei vari manufatti necessari al POM, questa sezione, all'interno dell'elemento distributionManager,
  • 9. 3 - Analisi Pag. 8/39 permette di specificare dove e come memorizzare i manufatti del progetto, in fase di deployment, all'interno del repository. Qualora la sezione snaposhotRepository non sia definita, le impostazioni dell'elemento repository sono utilizzati anche per la distribuzione di tipo snapshot. Ecco il listato che illustra le sezioni snapshotRepository e Repository all'interno della sezione distributionManagement. <project> ... <distributionManagement> <repository> <uniqueVersion>false</uniqueVersion> <id>corp1</id> <name>Corporate Repository</name> <url>scp://repo1/maven2</url> <layout>default</layout> </repository> <snapshotRepository> <uniqueVersion>true</uniqueVersion> <id>propSnap</id> <name>Propellors Snapshots</name> <url>sftp://propellers.net/maven</url> <layout>legacy</layout> </snapshotRepository> ... </distributionManagement> ... </project> Gli elementi di queste sezioni sono: • id, name: entrambi i campi servono per identificare il repository. Mentre il campo id è un identificatore univoco, il nome serve per rendere il campo leggibile. • uniqueVersion: è un attributo di carattere booleano il cui valore true serve ad incaricare Maven del versionamento dei vari manufatti pubblicati (generazione di un numero di versione univoco da associare ai manufatti memorizzati nel repository). Il valore false invece indica che la versione è definita come parte dell'indirizzo. • url: come lecito attendersi rappresenta l'informazione principale dell'elemento repository. Il formato URL, permette di specificare sia l'ubicazione sia il protocollo di trasporto da utilizzare per il trasferimento dei manufatti generati dal processo di build. • layout: come visto in precedenza permette di specificare la struttura del repository. In particolare: default indicata la struttura introdotta con Maven 2, mentre legacy rappresenta la struttura precedente.
  • 10. 3 - Analisi Pag. 9/39 3.1.4 - Property e Filtraggio delle Risorse Per filtraggio delle risorse si intende la sostituzione di variabili sui file di configurazione costituenti il nostro progetto. Per far si che le risorse vengano filtrate occorre abilitare il filtering nel tag resources. Se il filtraggio delle risorse è attivo, prima di qualsiasi operazione di compilazione, il framework si preoccupa di controllare tutti i file di risorsa (di default si trovano nella cartella /src/main/resources) e di sostituirne le variabili con alcuni valori preimpostati. Tali valori possono essere definiti come properties del progetto generico oppure, come si vedrà in seguito, definiti a livello di profilo. <project> ... <properties> <jdbc.driverclassname>com.mysql.jdbc.Driver</jdbc.driverclassname> <jdbc.url>jdbc:mysql://localhost:3306/development_db</jdbc.url> <jdbc.username>dev_user</jdbc.username> <jdbc.password>s3cr3tw0rd</jdbc.password> </properties> ... <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> Come esempio si consideri un file di properties, facente parte di un dato progetto, in cui vengono specificati i parametri di connessione verso la base dati. Tale file deve essere configurato in modo differente in base al contesto di compilazione (macchina locale dello sviluppatore, server di sviluppo, clienti). Il file che si troverà nei sorgenti del progetto, sarà dunque formattato come indicato di seguito: driver=${jdbc.driverclassname} url=${jdbc.url} username=${jdbc.username} password=${jdbc.password} Si può vedere che il file non è valorizzato ma, in fase di compilazione, verranno utilizzate le properties definite nel POM del progetto per sostituire i placeholder definiti da ${<chiave>}.
  • 11. 3 - Analisi Pag. 10/39 3.1.5 - Profili Una caratteristica introdotta a partire dalla versione 4.0 dei POM sono i profili. Queste sezioni permettono di variare opportune impostazioni in funzione dell'ambiente di build. Ciascun profilo include sia una sezione opzionale dedicata all'attivazione (una sorta di trigger per un profilo) sia un insieme di variazioni da apportare al POM qualora il relativo profilo venga attivato. Un esempio classico consiste nel far in modo che un progetto realizzato per eseguire determinati test faccia riferimento ad un diverso database a seconda dell'ambiente di esecuzione. Un altro esempio consiste nel far sì che il sistema, a seconda della versione del JDK utilizzata, prelevi opportune impostazione da diversi repository. <project> ... <profiles> <profile> <id>test</id> <activation>...</activation> <build>...</build> <modules>...</modules> <repositories>...</repositories> <pluginRepositories>...</pluginRepositories> <dependencies>...</dependencies> <reporting>...</reporting> <dependencyManagement>...</dependencyManagement> <distributionManagement>...</distributionManagement> </profile> </profiles> </project> Gli elementi del profilo permettono di ridefinire elementi già presenti all'interno del POM, pertanto ne ricopiano la struttura, come si può vedere nel precedente listato. E' possibile riunire le possibilità di filtering delle risorse e gestione dei profili ottenendo la possibilità di valorizzare differentemente determinate risorse statiche mediante l'uso dei profili. Il risultato è un listato simile al seguente. <project> ... <properties> <jdbc.driverclassname>com.mysql.jdbc.Driver</jdbc.driverclassname> <jdbc.url>jdbc:mysql://localhost:3306/development_db</jdbc.url> <jdbc.username>dev_user</jdbc.username> <jdbc.password>s3cr3tw0rd</jdbc.password> </properties> ... <build> <resources> <resource> <directory>src/main/resources</directory>
  • 12. 3 - Analisi Pag. 11/39 <filtering>true</filtering> </resource> </resources> </build> ... <profiles> <profile> <id>production</id> <properties> <jdbc.driverclassname> oracle.jdbc.driver.OracleDriver </jdbc.driverclassname> <jdbc.url>jdbc:oracle:thin:@proddb01:1521:PROD</jdbc.url> <jdbc.username>prod_user</jdbc.username> <jdbc.password>s00p3rs3cr3t</jdbc.password> </properties> </profile> </profiles> </project> 3.2 - Gestione delle Versioni Si definisce controllo delle versioni, la gestione di versioni multiple di un insieme di informazioni. Viene usato prevalentemente nello sviluppo di progetti informatici per gestire la continua evoluzione dei documenti digitali come il codice sorgente del software. Le modifiche a questi file sono identificate incrementando un numero o un codice associato ad essi, denominato "numero di versione", "etichetta di versione", o semplicemente "versione", e sono etichettate con il nome della persona che ha apportato la modifica. Gli strumenti software per il controllo versione sono sempre più riconosciuti essere necessari per la maggior parte dei progetti di sviluppo software. Nell'ingegneria del software, il controllo delle versioni è costituito da qualunque pratica che tenga traccia e permetta di controllare i cambiamenti al codice sorgente. Gli sviluppatori software talvolta usano il controllo versione software anche per i file di documentazione e di configurazione, oltre che per il codice sorgente. In teoria, il controllo versione può essere applicato a qualunque tipo di registrazione di informazioni. Riassumendo, l'obiettivo fondamentale di tutti i software che si occupano del controllo di versione è permettere a diversi sviluppatori di lavorare contemporaneamente su diversi file o addirittura sullo stesso file, automatizzando compiti come: • tenere traccia di chi sta modificando che cosa; • unire le modifiche una volta complete; • segnalare eventuali conflitti; • tenere una copia di ogni precedente versione e fare in modo che sia facilmente recuperabile.
  • 13. 3 - Analisi Pag. 12/39 3.2.1 - SVN, Subversion Subversion (noto anche come SVN, che è il nome del suo client a riga di comando) è un sistema di controllo versione progettato da CollabNet Inc. con lo scopo di essere il naturale successore di CVS, oramai considerato superato. Rispetto a CVS, Subversion introduce: • versionamento delle directories: con CVS il controllo di versione era applicato solo ai file, quindi le operazioni di copia e spostamento tra diverse directory non era gestito adeguatamente. Con Subversion viene tenuta traccia anche del contenuto di ogni singola directory e quindi lo spostamento di un file è a tutti gli effetti considerata una modifica, quindi rintracciabile e reversibile. • commits atomici: una serie di modifiche viene applicata solo in blocco – se anche solo una di esse crea errori, non viene applicata nessuna delle modifiche inviate. Questo evita la creazione di versioni incomplete che dovrebbero poi essere corrette a mano. • versionamento dei metadati: è possibile assegnare a file e directory delle proprietà personalizzate – dei veri e propri metadati – e mantenere lo storico anche delle modifiche a queste proprietà. • astrazione dal livello di rete: l'accesso dal client al repository (cioè al deposito centralizzato dei files) può avvenire attraverso il protocollo HTTP (sfruttando un apposito modulo di Apache), attraverso un apposito server standalone (SVNServe), o direttamente attraverso il filesystem (ma solo nel caso in cui il repository sia situato sulla stessa macchina). In tutti questi casi, i comandi e le operazioni fondamentali non cambiano, così come non cambia la struttura del repository e delle copie di lavoro locali. 3.3 - Continuous Integration Con il termine Continuous Integration si intende una pratica di sviluppo software in cui i membri di un team devono integrare il proprio lavoro con la linea di sviluppo
  • 14. 3 - Analisi Pag. 13/39 principale. Con elevata frequenza si considera almeno una integrazione al giorno per ogni membro del team. Tali integrazioni vengono verificate da una compilazione automatica (che comprende anche l'esecuzione di test) per rilevare errori di integrazione il più rapidamente possibile. Molti team trovano che questo approccio porta a ridurre significativamente i problemi di integrazione e permette di sviluppare software più rapidamente. I sistemi che eseguono la integrazione continua, come Cruise Control, Apache Continuum, TeamCity, e così via, sono ormai presenti in ogni progetto che si rispetti. Si tratta di sistemi che, su richiesta, o ad intervalli predefiniti (ogni ora, durante le ore notturne) eseguono il processo di build dell'intero progetto. 3.3.1 - Apache Continuum Apache Continuum è uno dei principali applicativi open source per l'integrazione continua progettato per build java. Una caratteristica che lo distingue da altri strumenti similari è la gestione della sicurezza basata sui ruoli. Questa funzione fornisce il controllo su quali aspetti della compilazione possono essere visti e gestiti dai diversi utenti. Nel complesso, le caratteristiche principali sono simili a quelle appartenenti ad altri applicativi di build management come Hudson e Cruise Control (gestione dei rilasci, notifica e-mail, integrazione con i più diffusi strumenti di compilazione, integrazione con Maven e integrazione con sistemi di SCM come SVN o CVS). Lo strumento di interfaccia utente è web based, e dopo che il server è stato avviato si può accedere da browser con un collegamento a http://localhost:8080/continuum. Apache Continuum offre inoltre la possibilità di accedere alle proprie funzionalità anche da remoto mediante un client XML-RPC. Il client è accessibile mediante un collegamento a http://localhost:8080/continuum/xmlrpc.
  • 15. 3 - Analisi Pag. 14/39 3.4 - FTP, Modalità di Rilascio Il File Transfer Protocol (protocollo di trasferimento file o FTP), è un Protocollo per la trasmissione di dati tra host basato su TCP. Gli obiettivi principali di FTP descritti nella sua RFC ufficiale sono: • Promuovere la condivisione di file (programmi o dati); • Incoraggiare l'uso indiretto o implicito di computer remoti; • Risolvere in maniera trasparente incompatibilità tra differenti sistemi di stoccaggio file tra host; • Trasferire dati in maniera affidabile ed efficiente. E' stato necessario interessarsi al protocollo FTP perché questo metodo di distribuzione viene utilizzato per effettuare i rilasci in Insiel Mercato così come in moltissime altre aziende ed è una delle principali modalità con cui vengono effettuati i trasferimenti di file di grosse dimensioni. Per permettere a Maven di interagire con un repository FTP, è necessario utilizzare una particolare estensione del plugin wagon (utilizzato per prelevare e memorizzare file in server remoti). <project> ... <build> ... <extensions> <extension> <groupId>org.apache.Maven.wagon</groupId>
  • 16. 3 - Analisi Pag. 15/39 <artifactId>wagon-ftp</artifactId> <version>1.0-alpha-3</version> </extension> </extensions> ... </build> ... </project> 3.5 - Stesura dei Requisiti Nei paragrafi precedenti, si sono esaminate le tecnologie comuni alle applicazioni attualmente sviluppate dalla azienda Insiel Mercato, e su queste si sono esaminate le caratteristiche che sembrano poter offrire la soluzione al problema della gestione di profili e versioni. Il risultato dell'analisi si riassume nelle seguenti note: • Il tool Maven offre la possibilità di gestire dei profili in modo tale che, in fase di compilazione del progetto, gli attributi che vengono definiti nel file POM dei progetti, siano sovrascrivibili o comunque modificabili. • Un particolare punto di interesse nella nota precedente è costituito dalle properties, associazioni tra chiavi e valori configurabili da profilo, che possono essere utilizzate come placeholder all'interno delle risorse statiche dei progetti; • I profili maven, così come le properties, possono trovarsi anche esternamente al POM, ed essere iniettati durante la fase di compilazione. • Ad ogni versione di un progetto Maven, corrisponde un tag su SVN. Considerando che un tag non rappresenta una linea di sviluppo ma un punto (è dunque non è modificabile), non si può pensare di modificare i sorgenti del progetto per poter integrare il profilo all'interno del pom del progetto stesso. • Sulla base della nota precedente, si comprende come sia necessario che i profili vengano definiti all'interno di un sistema che sia indipendente dal gestore del versionamento. Tale sistema dovrà essere in grado, non solo di memorizzare i profili, ma anche di crearli e di poterli associare ai clienti. • Si riscontra che sia possibile utilizzare un sistema di Continuous Integration per eseguire delle operazioni Maven, che questi abbiano delle interfacce remote, e che Maven consenta di effettuare il deploy di un compilato su di un server FTP. Le note sopra esposte definiscono non solo il risultato della analisi ma anche il documento dei requisiti che l'applicativo che si vuole realizzare dovrà essere in grado di soddisfare. In particolare, sulla base di quanto appena illustrato si vuole realizzare una applicazione che sia in grado di: • creare dei profili di compilazione per progetti Maven in base alle configurazioni dei clienti; • memorizzare i suddetti profili, e le relazioni con progetti e clienti, in un archivio locale; • utilizzando i profili creati, far eseguire ad un motore di Continuous Integration il
  • 17. 3 - Analisi Pag. 16/39 rilascio dell'applicazione per il dato cliente su di un server FTP. Dalla rielaborazione delle note e delle considerazioni appena esposte, si possono enunciare i seguenti requisiti di progetto. • L'applicazione dovrà essere in grado di distinguere la figura dello sviluppatore da quella dell'addetto alla messa in produzione e per ciascuno di essi fornire le funzionalità strettamente necessarie all'esercizio delle proprie funzioni. In tal modo si riusciranno ad isolare le responsabilità e meglio definire gli standard di esecuzione. • Deve essere possibile, all'interno della applicazione, gestire le connessioni verso i build manager o continuous integration system, verificandone la corretta raggiungibilità e permettendo l'importazione di progetti da essi. • Devono essere registrabili e modificabili le definizioni dei clienti. • Deve essere possibile importare progetti dal sistema di integrazione continua e registrarli all'interno dell'applicativo oppure, viceversa, da questo, dopo aver inserito i parametri fondamentali, effettuare un export verso in sistema esterno. • L'applicativo deve possedere, per ogni progetto, i riferimenti al posizionamento su di un sistema SCM. • Dai riferimenti SCM di ogni progetto deve essere possibile effettuare il checkout dei sorgenti e da questi ricavare un template di definizione dei profili, caratteristico del progetto che si sta profilando. • Sulla base dei template dei profili ed in associazione con progetto e cliente, deve essere possibile per l'utente, inserire i parametri che caratterizzano il profilo e salvare quest'ultimo nella base dati. • L'applicazione deve poter far eseguire, ad un sistema di Continuous Integration remoto, un comando maven di compilazione di un progetto, in base al profilo voluto. • Il risultato del comando di build indicato precedentemente deve avere come esito positivo, il deploy del compilato del progetto su di un server FTP. Tale compilato deve contenere la configurazione definita nel profilo. • In seguito al deploy eseguito con successo, deve essere registrata l'esecuzione del rilascio per il dato cliente. • Con una ulteriore interrogazione del sistema SCM, si preleva un secondo template che specifica le informazioni importanti che occorre registrare per il dato progetto. • Sulla base del template sopra esposto, deve essere possibile registrare le informazioni ottenute dal cliente sull'ambiente specifico di installazione. • L'applicativo deve permettere ricerche esaustive sulla base di progetti, versioni e clienti.
  • 18. 3 - Analisi Pag. 17/39 3.6 - Realizzazione modello Concettuale E-R Essendo necessario l'utilizzo di una base dati per immagazzinare le informazioni relative a progetti, clienti, profili e rilasci, si rende indispensabile effettuare una corretta progettazione della stessa. Un errore durante questa fase si ripercuoterebbe sull'intero progetto, mentre una base di dati ben progettata risulterebbe invece più efficiente e semplificherebbe lo sviluppo delle applicazione. Il procedimento per la progettazione di una base di dati segue i seguenti passi: • Stesura dei requisiti del sistema informativo in linguaggio naturale; • Glossario ed identificazione delle entità; • Realizzazione del Modello ER. Nel capitolo relativo alla realizzazione, vengono effettuati ulteriori elaborazioni dello schema E-R fino a giungere allo schema logico e fisico. 3.6.1 - Stesura dei Requisiti del Sistema Informativo Si produce una prima versione dei requisiti in linguaggio naturale, raggruppando frasi descrittive relative a categorie diverse di dati. Frasi riguardanti i progetti: • Un Continuous Integration System viene utilizzato per il testing dei progetti. • I progetti vengono compilati da un Continuous Integration System. • I progetti sono versionati su un gestore di versioni SCM. • Gli sviluppatori depositano i progetti su SCM e Continuous Integration System. Frasi relative ai Profili: • Il profilo è la definizione della personalizzazione di un progetto. • Ogni cliente può volere uno o più profili dello stesso progetto. • Ogni compilazione viene eseguita con un certo profilo. • Il template del profilo viene preso dai sorgenti versionati del progetto. • I deployer sono incaricati della realizzazione dei profili. Frasi relative al build: • Il build viene fatto dal Continuous Integration System. • Tutti i progetti sono gestiti dal Continuous Integration System. • Il Continuous Integration System riceve i profili dall'applicazione rudra. • Un build riuscito può essere rilasciato al cliente. • I deployer installano i progetti dai clienti. Frasi relative al cliente: • Il cliente richiede il rilascio di un progetto;
  • 19. 3 - Analisi Pag. 18/39 • Il progetto rilasciato viene configurato per il cliente. • Al cliente viene installato il prodotto richiesto. Frasi relative ai rilasci: • Se un build da esito positivo può essere installato. • Ad ogni installazione corrisponde un buildn di un progetto. • Le installazioni vengono fatte dai deployer. Frasi relative agli sviluppatori: • Ogni progetto ha uno o più sviluppatori. • Gli sviluppatori utilizzano il server SCM per versionare i progetti. • Gli sviluppatori monitorano i progetti con i CIS. Frasi relative ai deployer: • I deployer creano i profili per i progetti. • Una installazione corrisponde all'intervento di un deployer su un progetto. 3.6.2 - Glossario dei Termini Analizzando le frasi espresse in linguaggio naturale, raggruppate per categoria di dati, si possono identificare dei termini ricorrenti e tra questi delle relazioni. Termine Descrizione Collegamenti Progetto Prodotto venduto dalla azienda Sviluppatore, Profilo, CIS, SCM, Build Profilo Personalizzazione del progetto per il cliente Deployer, Progetto, Cliente, Build Cliente Colui a cui si vende il progetto personalizzato Installazione, Profilo Sviluppatore Sviluppa i Progetti Progetto Deployer Crea i profili e installa i progetti compilati Profilo, Installazione Build Rappresenta il processo con cui si crea il Progetto, Profilo, compilato e i suoi risultati Installazione CIS Continuous Integration Systema Progetto Installazione Installazione del progetto compilato presso il Deployer, Cliente, Build cliente SCM Sistema di versionamento Progetto
  • 20. 3 - Analisi Pag. 19/39 3.6.3 - Schema concettuale E-R Traducendo il glossario in uno schema concettuale basato su Entità e Relazioni si ottiene lo schema indicato di seguito. Questo è lo schema scheletro dal quale si parte con l'analisi che condurrà alla realizzazione dello schema E-R vero e proprio. Dallo schema precedente si può immediatamente evincere che le entità Sviluppatore e Deployer possono essere considerate delle specializzazioni della figura del Dipendente. Inoltre dalla comprensione delle frasi in linguaggio naturale e dalla analisi del contesto costituito dal sistema informativo che si vuole realizzare, è possibile definire sia gli attributi che le singole entità (e nel caso, anche le relazioni) debbano avere, sia la cardinalità con cui le entità entrano in relazione tra loro. Questa analisi è di fondamentale importanza per lo sviluppo dello schema logico e fisico che si andrà a svolgere nel capitolo relativo alla realizzazione della base dati.
  • 21. 3 - Analisi Pag. 20/39 Di seguito viene quindi esposto lo schema Entità-Relazione su cui si è strutturata la base dati del progetto Rudra.
  • 22. 4 - Realizzazione Pag. 21/39 4 - REALIZZAZIONE In considerazione del fatto che l'applicativo in realizzazione necessiterà di essere utilizzato da diverse figure professionali (sviluppatori, addetti alla messa in produzione, project manager, ecc..) e in diversi contesti (tutti però localizzabili all'interno dell'azienda), si è deciso di realizzare una applicazione web. Tale scelta permette una maggiore semplicità d'uso ed è ottimizzata per l'uso intranet. Essa viene inoltre giustificata dagli stretti legami con altri applicativi ad uso intranet come sistemi di continuous integration, repository per il controllo delle versioni, repository maven interni, server ftp per i rilasci, server ldap per le autenticazioni e sistemi di issue tracking. 4.1 - Interazione tra Sistemi e Ruolo degli Attori Si vuole realizzare una applicazione capace di gestire un elenco di progetti posti in un sistema di Continuous Integration. Di tali progetti deve essere possibile ricavare i riferimenti al server di versionamento SCM da cui a sua volta si estraggono le informazioni necessarie alla compilazione di un profilo. Successivamente, in base alle informazioni appena fornite dal sistema SCM, si procede alla creazione di un nuovo profilo per il dato cliente associandolo al progetto stesso all'interno del database dell'applicazione Rudra. Tale profilo viene poi utilizzato per la generazione del progetto personalizzato da parte del sistema di continuous integration che provvederà al deploy del compilato finale su di un server FTP per la distribuzione. Inoltre si vuole registrare l'operazione di rilascio, arricchendola di informazioni specifiche del progetto e del cliente, all'interno del database. In tutto questo processo, gli utenti che compiono le diverse attività possono essere categorizzati in due attori principali, ovvero: • Sviluppatore: Colui che sviluppa e mantiene i progetti. Stabilisce i rilasci delle versioni e in concomitanza con questi eventi si occupa di realizza i tag sul sistema di versionamento e porre l'applicazione appena versionata su un sistema di continuous integration. • Deployer: Colui che si occupa della messa in produzione degli applicativi. Non ha competenze riguardo al funzionamento dei progetti o delle tecnologie con cui questi sono stati realizzati. Si occupa di ricavare dai clienti le informazioni sul contesto in cui le applicazioni si troveranno ad operare, a configurarle adeguatamente realizzando un profilo, e a porre in produzione il compilato che potrà ricavare dal server FTP.
  • 23. 4 - Realizzazione Pag. 22/39 Come si può facilmente vedere dallo schema precedente, grazie all'introduzione di questo meccanismo di rilascio, non esistono punti in comune tra la figura dello sviluppatore e quella del deployer. 4.2 - Diagrammi di sequenza I due attori principali che interagiranno con il progetto Rudra saranno dunque i deployer e gli sviluppatori. Per ciascuno di essi sono stati realizzati i seguenti diagrammi di sequenza. Per la figura dello sviluppatore si hanno le seguenti operazioni: • registrazione di un sistema di Continuous Integration; • richiesta del progetti importabili dal CIS; • importazione di un progetto.
  • 24. 4 - Realizzazione Pag. 23/39 Per la figura del deployer si hanno le seguenti operazioni: • richiesta form per creazione del profilo; • salvataggio profilo; • richiesta rilascio; • salvataggio dettaglio rilascio.
  • 25. 4 - Realizzazione Pag. 24/39 4.3 - Progettazione Logica e Fisica della base dati Non esistono DBMS in grado di operare direttamente sui concetti di schemi E-R. Risulta quindi necessario tradurli in altri schemi di dati chiamati logico relazionali. Questa traduzione può essere eseguita in modo semi-automatico seguendo una determinata serie di operazioni da eseguire. Il progetto logico presenta in generale una soluzione standard determinabile in modo semplice e diretto. A seconda dei casi, sono però disponibili anche soluzioni alternative, che possono rivelarsi più o meno convenienti. In queste occasioni si deve tenere conto dell’efficienza dello schema logico risultante e delle operazioni da effettuare (derivanti da flussi e processi).
  • 26. 4 - Realizzazione Pag. 25/39 Per ottenere lo schema logico della base dati è necessario dunque procedere a trasformazioni e traduzioni dello schema E-R seguendo le fasi indicate di seguito: • Eliminazione delle generalizzazioni; • Identificazione delle chiavi primarie; • Traduzione di entità e associazioni in schemi di relazioni. Durante la realizzazione di queste fasi, si devono compiere le seguenti valutazioni, che permettono una ottimizzazione dello schema logico risultante dalla interpretazione dello schema E-R: • Previsioni sulla natura e la frequenza delle operazioni; • Valutazioni quantitative sui volumi di dati (entità, associazioni, percentuali di copertura di gerarchie, percentuali di valori nulli). In tutti quei casi in cui sono possibili scelte alternative, occorre prestare la dovuta attenzione alle seguenti considerazioni, molto spesso intuitive: • Le proprietà logiche sono comunque primarie rispetto ai motivi di efficienza; • Tenere sulla stessa entità informazioni che verranno di frequente consultate insieme; • Tenere su entità separate informazioni che verranno consultate separatamente; • Limitare l’incidenza di valori nulli per attributi opzionali. L'applicazione delle regole e delle considerazioni precedenti, porta alla stesura delle seguenti trasformazioni da applicare allo schema E-R: • la relazione esistente tra CIS e Progetto ha cardinalità 1,1 sulla seconda entità, e su questa viene accorpata; • vista la cardinalità 1,1 della relazione tra SCM e Progetto, la prima entità viene completamente accorpata nella seconda (questa soluzione facilita anche la gestione dei progetti e della interfaccia.); • gli argomenti del Profilo, essendo molteplici, vengono estratti dall'entità Profilo e posizionati in una tabella a parte di cui il profilo è chiave esterna (tabella Profile_Property); • le dipendenze aggiuntive che possono essere richieste da un Profilo possono essere molteplici, quindi vengono estratte dall'entità Profilo e posizionate in una tabella a parte di cui l'identificativo del profilo è chiave esterna (tabella Profile_Dependency); • gli argomenti della Installazione, essendo molteplici, vengono estratti dall'entità Installazione e posizionati in una tabella a parte di cui l'identificativo del profilo è chiave esterna (tabella Release_Property); • in tutti i casi in cui la cardinalità con cui una entità entra in relazione è 1,1, la relazione viene accorpata alla entità stessa; • l'identificazione delle chiavi primarie segue le indicazioni già fornite nello schema E-R realizzato. All'interno degli applicativi sviluppati da Insiel Mercato, la gestione di autenticazioni ed autorizzazioni degli utenti, viene svolta da un kernel di funzionalità, condiviso tra tutte le applicazioni, che utilizza una base dati condivisa. Trattandosi dunque di una
  • 27. 4 - Realizzazione Pag. 26/39 soluzione già esistente e proprietaria, essa non viene trattata in questo studio. Il risultato di tutte queste considerazioni, applicate sullo schema entità-Relazione che è stato elaborato nella fase di Progettazione di questa tesi, ha prodotto lo schema logico che ha come prodotto il seguente schema fisico. 4.4 - Implementazione L'applicazione web che si intende sviluppare presenterà tre diversi strati software. Il primo, ovvero lo stato dei controller sarà recettivo delle richieste http inviate dal browser dell'utente. Si occuperà dunque di verificare autenticazioni ed autorizzazioni e di fornire successivamente una risposta in base a ciò che verrà restituito dai servizi che verranno di volta in volta richiamati. Il secondo strato è uno strato di servizi che rispettano il pattern meglio noto come Facade. Tali servizi permettono di nascondere la complessità delle operazioni ai controller o agli altri servizi chiamanti. In tal modo la complessità di certe operazioni complesse viene ad essere concentrato in un punto, ed essendo i servizi realizzati nel modo più generico e astratto possibile, il codice sviluppato è estremamente riusabile.
  • 28. 4 - Realizzazione Pag. 27/39 Il terzo strato è quello dedicato alla persistenza. Tale livello non è sempre presente. Grazie all'utilizzo di un motore di persistenza come Hibernate, non sarebbe necessario realizzare uno strato che si occupi delle operazioni di scrittura e lettura sulla base dati, ma in quei casi in cui le operazioni di lettura e scrittura possono essere più complesse e magari ricorrenti all'interno dei diversi servizi, allora si preferisce estrarre il codice relativo e posizionarlo in una classe di appoggio. L'interazione con i servizi di versionamento SCM e di Continuous Integration CIS sono gestiti da appositi servizi. 4.5 - Tecnologie e Framework utilizzati Per la realizzazione dell'applicazione web si è scelto di utilizzare il framework Spring. Spring è un framework open source per lo sviluppo di applicazioni che rappresenta al momento il tentativo più riuscito per semplificare lo sviluppo di applicazioni "enterprise" di una certa complessità nell'ambito Java. Spring interpreta nel modo migliore i nuovi modelli di programmazione definiti dall'IoC e dall'AOP e permette di raggiungere un livello di disaccoppiamento degli strati applicativi impedito invece dalla natura "invasiva" della tecnologia EJB. Si prestano molto bene alla realizzazione del progetto anche alcuni sotto-framework di spring, quali Spring MVC (per la miglior gestione del pattern Model-View-Control) e Spring Security (per la gestione di autenticazioni e autorizzazioni). Le view che vengono restituite agli utenti sono generate grazie alle JSP la cui composizione viene realizzata dal framework Tiles 2. Tiles permette agli sviluppatori di
  • 29. 4 - Realizzazione Pag. 28/39 definire frammenti di pagine jsp che possono essere assemblate in una pagina completa in fase di esecuzione. Questi frammenti possono essere utilizzati come semplice include, al fine di ridurre la duplicazione degli elementi di pagina comuni o incorporato in altri frammenti al fine di sviluppare una serie di modelli riutilizzabili. 4.5.5 - Hibernate e Gestione della Persistenza Hibernate (talvolta abbreviato in H8) è 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. L'obiettivo di Hibernate è quello di esonerare lo sviluppatore dall'intero lavoro relativo alla persistenza dei dati. Hibernate si adatta al processo di sviluppo del programmatore, sia se si parte da zero sia se da un database già esistente. Hibernate genera le chiamate SQL e solleva lo sviluppatore dal lavoro di recupero manuale dei dati e dalla loro conversione, mantenendo l'applicazione portabile in tutti i database SQL. Hibernate fornisce una persistenza trasparente per "Plain Old Java Object". In questa tesi sono state utilizzate le annotazioni JAXB per personalizzare la mappatura tra oggetti java, i cosiddetti POJO, e tabelle e altri costrutti SQL. Di seguito si riporta un esempio di classe di modello mappata con hibernate. ... @SuppressWarnings("serial") @Entity @Table(name = "project", uniqueConstraints = { @UniqueConstraint(columnNames={"group_id","artifact_id","version"})}) public class Project implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) protected Long id; @Column(name = "group_id", nullable = false) protected String groupId; @Column(name = "artifact_id", nullable = false) protected String artifactId; @Column(name = "version", nullable = false) protected String version; @Column(name = "scm_url", nullable = false) protected String scmUrl; @Column(name = "scm_username", nullable = false) protected String scmUsername; @Column(name = "scm_password", nullable = false)
  • 30. 4 - Realizzazione Pag. 29/39 protected String scmPassword; @ManyToOne(cascade = CascadeType.ALL) protected ContinuousIntegrationSystem cis; @Column(name = "cis_project_id") protected Long cisProjectId; @Column(name = "invalidate", nullable = false) protected Boolean invalidate = false; ... // getter e setter per gli attributi della classe L'annotazione @Entity permette ad Hibernate di riconoscere la classe come referenziata su di una tabella, l'annotazione @Id ne riconosce la chiave primaria e l'annotazione @ManyToOne permette di definire una chiave esterna con un'altra entità. 4.6 - Definizione dei Servizi Come già detto, 4.6.1 - ScmService Per interagire con il sistema di versionamento è necessario l'utilizzo di librerie esterne. Dopo una ricerca a riguardo si è scelto, per la particolare implementazione del servizio verso un sistema SVN, di utilizzare il progetto SVNKit. Tale libreria, tra l'altro, è anche utilizzata dallo stesso IDE Eclipse utilizzato per la realizzazione del progetto. Per importare la libreria nel progetto occorre definire nel POM la seguente dipendenza ... <dependency> <groupId>org.tmatesoft.svnkit</groupId> <artifactId>svnkit</artifactId> <version>1.3.5</version> </dependency> ... Per poter effettuare delle operazioni sul server SVN occorre conoscerne i riferimenti. Si riporta un esempio della connessione vai codice effettuata nel servizio. ... DAVRepositoryFactory.setup(); SVNUpdateClient client = new SVNUpdateClient( SVNWCUtil.createDefaultAuthenticationManager(
  • 31. 4 - Realizzazione Pag. 30/39 project.getScmUsername(), project.getScmPassword()), SVNWCUtil.createDefaultOptions(true)); client.doCheckout(SVNURL.parseURIDecoded(scmUrl), outputFolder, SVNRevision.UNDEFINED, SVNRevision.HEAD, SVNDepth.INFINITY, true); ... 4.6.2 - CisService Per connettersi remotamente ad una istanza di Continuum, occorre utilizzare il jar continuum-xmlrpc-client. Tale libreria può essere aggiunta come dipendenza al file pom del progetto. ... <dependency> <groupId>org.apache.continuum</groupId> <artifactId>continuum-xmlrpc-client</artifactId> <version>1.4.0</version> </dependency> ... Per connettersi a Continuum con il client xml-rpc indicato è necessario utilizzare la classe ContinuumXmlRpcClient, ilcui costruttore ha 3 parametri: • url, l'url a cui risponde il listener xmlrpc (http://host:port/continuum/xmlrpc); • user, l'username dell'utente di Continuum; • password, la password dell'utente. Per ottenere l'istanza del client nel codice java: ... URL url = new URL( "http://localhost:8080/continuum/xmlrpc" ); ContinuumXmlRpcClient client = new ContinuumXmlRpcClient( url, username, password ); ... Per ottenere la lista dei progetti: ... List<ProjectSummary> ps = client.getProjects( projectGroupId ); ... Per richiamare il build di un progetto: ... client.buildProject( project.getId(), buildDefinitionId ); ...
  • 32. 4 - Realizzazione Pag. 31/39 4.7 - Interfaccia L'interfaccia dell'applicativo è stata realizzata per permettere una facile interazione con l'utente. I contesti in cui si possono eseguire le operazioni sono rappresentati come dei Tab nella parte alta dell'interfaccia. Per ognuno di essi è presente un sotto menu che permette l'esecuzione delle varie operazioni. Un barra di navigazione permette di tenere traccia della posizione in cui ci si trova durante la navigazione della applicazione. 4.7.1 - Installazione e Configurazione L'installazione dell'applicativo Rudra è piuttosto semplice. La sola cosa da fare è creare uno schema di database vuoto (in questa tesi si è utilizzata una base dati postgres, ma con pochissimi accorgimenti si può utilizzareq ualsiasi altro RDMS di uso comune) e indicarne i riferimenti nel file: rudraWEB-INFapplication-configpersistence-config.xml ... <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.postgresql.Driver" /> <property name="url" value="jdbc:postgresql:rudra" /> <property name="username" value="rudra" /> <property name="password" value="rudra" /> </bean> ... Una volta mandato in esecuzione l'application server (in questo caso si è utilizzato Tomcat), hibernate si occuperà di realizzare lo schema della base dati sulla base degli oggetti di modello che sonos tati mappati con le annotazioni JAXB. Per poter configurare l'applicazione in modo corretto, l'amministratore o uno degli sviluppatori deve accedere alla applicazione effettuando il login.
  • 33. 4 - Realizzazione Pag. 32/39 La prima operazione che deve essere eseguita è l'associazione di un sistema di Continuous Integration. In questa schermata devono essere inseriti i parametri relativi alla connessione remota. Una volta associato il CIS, occorre importare i progetti da voler rilasciare. Questi vengono selezionati da una lista di tutti i progetti attualmente disponibili sul sistema CIS precedente mente associato. La pressione del tasto importa, permette di registrare i progetti sulla base dati e di gestirli dal progetto Rudra.
  • 34. 4 - Realizzazione Pag. 33/39 4.7.2 - Esempio d'uso Le seguenti schermate indicano le operazioni che normalmente vengono eseguite dal gruppo degli addetti ai rilasci. Una volta eseguito il login, essi verificano l'esistenza del cliente oppure, in caso contrario, lo inseriscono. Si procede dunque alla generazione del profilo richiesto indicando esplicitamente il progetto che si vuole rilasciare e il relativo cliente. Una volta che viene eseguita la registrazione del profilo, si procede con il checkout del progetto dal repository SCM su cui esse viene versionato, e se ne estrae il template di definizione dei placeholder.
  • 35. 4 - Realizzazione Pag. 34/39 Il template ottenuto contiene le indicazioni relative ai nomi delle chiavi dei placeholder e la descrizione di che cosa indicano. Tali template e tali note descrittive note sono state preventivamente indicati dagli sviluppatori prima di effettuare il tag del progetto. Il deployer si occupa dunque di compilare il form per l'immissione dei dati del profilo aiutato in questa operazione dalla descrizione. Successivamente vedrà l'elenco dei profili, indicato di seguito, dal quale potrà richiedere la compilazioen remota e il deploy sul server di rilascio FTP. Nell'arco di pochi secondi o pochi minuti a seconda della dimensione dle progetto e delle performance della rete intranet, sarà possibile interrogare il server FTP sul quale si troverà il file compilato richiesto.
  • 36. 4 - Realizzazione Pag. 35/39 4.8 - Configurazione delle Applicazioni da Gestire Affinché un progetto gestito tramite Maven possa usufruire del sistema descritto in questa tesi, esso deve necessariamente: • avere i propri file sorgenti versionati su di un sistema SCM raggiungibile; • i file sorgenti sopra indicati debbono essere sottoposti ad un sistema di Continuous Integration raggiungibile; • avere nella root dei sorgenti, la definizione dei template che permettono la definizione dei Profili e dei Rilasci; Per poter utilizzare la generazione dei profili in Rudra, è necessario che i progetti da gestire abbiano al loro interno un file di definizione dei placeholder da sostituire in fase di compilazione. Il file viene posto nella root del progetto a pari livello del pom.xml e si chiama: /rudra-profile-template.properties In questo file sono presenti le coppie di chiave/descrizione, come illustrato nell'esempio:
  • 37. 4 - Realizzazione Pag. 36/39 rudra.db.driver=Se si utilizza un database Oracle, utilizzare il driver Oracle Thin JDBC: "oracle.jdbc.driver.OracleDriver". rudra.db.url=Contiene il nome della sorgente di dati nella forma "jdbc:oracle:thin:@<server_name>:<db_port>:<SID>". Il valore server_name è l'indirizzo IP o il nome assegnato dall'admin del sistema al server di database. Il valore SID è l'identificatore del sistema di database. Se sullo stesso sistema sono in esecuzione più database Oracle, usare SID per distinguerli. Ad esempio, se il server si chiama Aristotle, la porta del database è la 1343 e su tale server è stato definito un SID di database di nome patients, immettere il seguente valore: "jdbc:oracle:thin:@Aristotle:1343:patients". rudra.db.username=Nome utente per l'accesso alla base dati. rudra.db.password=Password dell'utente. Nel file pom devono essere presenti le seguenti sezioni. Tali modifiche vengono eseguite per poter utilizzare le modalità di deploy effettuate tramite il plugin wagon. Definizione del repository per il deploy: <distributionManagement> <repository> <id>ftp-repository</id> <url>ftp://192.168.1.104/home/ftp-user</url> </repository> </distributionManagement> Estensione del plugin Wagon: <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ftp</artifactId> <version>1.0-beta-6</version> </extension> </extensions> NB: Nello sviluppo di questo progetto si è deciso di utilizzare il plugin wagon di Maven per il deploy degli artefatti compilati sul server FTP, mediante l'estensione del plugin. Tale soluzione è efficace e stabile, in quanto wagon è un plugin intrinseco di Maven. Si consideri però che l'utilizzo un plugin così specifico, può causare dei fastidi nel momento in cui si volessero effettuare delle modifiche alle modalità di deploy. Basti pensi al caso in cui si volesse far deployare il file compilato in una determinata cartella con allegati altri documenti, come guida all'installazione, o file connessi che comunque non riguardano il build in se stesso. In tal caso la soluzione che si consiglia di adottare è di realizzare un plugin personalizzato di Maven da far in seguito inglobare in tutti i POM dei progetti gestiti tramite Rudra.
  • 38. 4 - Realizzazione Pag. 37/39 5 - CONCLUSIONI L'obiettivo di questo lavoro di tesi era la realizzazione di una sistema software che permettesse di tenere traccia dei rilasci degli applicativi java web prodotti da una azienda di sviluppo software, con particolare attenzione alla gestione dei profili. Tale obiettivo si può dire pienamente raggiunto. Inoltre, grazie al fatto che i progetti della azienda erano gestiti con il tool Maven, si è potuto, non solo tenere traccia dei profili dei vari clienti, ma anche crearli direttamente nell'applicativo, grazie a dei template predefiniti. La successiva interazione con un sistema di Continuous Integration ha poi permesso che la generazione dei compilati da rilasciare avvenisse in modo assolutamente automatico e trasparente per il personale incaricato della messa in produzione. Il progetto realizzato vanta una quasi immediata integrazione all'interno di un sistema preesistente, se dotato di gestione delle versioni (Subversion) e testing mediante meccanismi di continuous integration (Apache Continuum). Ciò significa che è possibile adottarlo senza incorrere nella necessità di dover riscrivere parti di applicazioni preesistenti o di dover modificare ambienti di lavoro. Il suo sviluppo ha richiesto notevole studio delle tecnologie disponibili e una buona conoscenza degli ambienti e delle meccaniche aziendali. La realizzazione vera e propria del progetto ha comportato alcuni mesi. Grazie al fatto che il codice è stato strutturato a moduli tra loro indipendenti, e che questi sono stati resi il più generici possibile, una buona parte del codice sviluppato nella parte di “business intelligence” può essere facilmente riutilizzato per altre applicazioni che ne debbano aver bisogno. Personalmente, ritengo che tale progetto si possa definire di grande utilità per le aziende di produzione software, sia per quanto riguarda l'organizzazione e la reperibilità dei dati relativi a clienti ed installazioni, sia in termini di tempi e costi dovuti ad installazione, sviluppo e manutenzione dei prodotti. Nel caso specifico, ritengo che l'adozione di questo applicativo all'interno di Insiel Mercato, permetterà grandi evoluzioni nella fase di “deploy” dei prodotti, evitando i vari disagi in cui spesso capita di incorrere. Consentirà inoltre di aumentare velocità ed efficacia della manutenzione e di nuovi sviluppi, avendo sottomano una chiara mappatura della situazione della distribuzione dei progetti tra i clienti. Il progetto realizzato verrà ulteriormente sviluppato nel corso dei prossimi mesi ed è prevista la sua entrata in produzione presso il laboratorio tecnico di sviluppo per la pubblica amministrazione di Insiel Mercato, nel mese di settembre. Prima del suo uso effettivo, se ne vogliono aumentare le caratteristiche, integrandovi il sistema di gestione di autenticazioni e autorizzazioni presente nell'azienda, fornendo l'interazione con JIRA (un sistema di issue tracking, ovvero un software che ha il compito di raccogliere e mantenere organizzate tutte le informazioni e le segnalazioni relative a gestione, sviluppo e programmazione di una applicazione), un servizio di invio notifiche
  • 39. 5 - Conclusioni Pag. 38/39 tramite posta digitale e personalizzare maggiormente quello che è al momento il comportamento dell'applicativo nella fase di deploy del compilato sul server ftp. A completamento di questo lavoro di tesi vengono considerati i sorgenti del software realizzato, nonché i documenti specifici della applicazione, consistenti nella guida di installazione e configurazione. 6 - RIFERIMENTI [1] Maven, http://maven.apache.org/ [2] Luca Vetti Tagliati, Mokabyte "Maven: best practice applicate al processo di build e rilascio di progetti Java. " [3] Apache Continuum, http://continuum.apache.org/ [4] SVNKit, subversion for java, http://svnkit.com/ [5] Maven Wagon FTP, http://maven.apache.org/wagon/wagon-providers/wagon-ftp/ [6] Martin Fowler, “Continuous Integration”, http://martinfowler.com/articles/continuousIntegration.html [7] Controllo Versioni, http://it.wikipedia.org/wiki/Controllo_versione [8] Guida Subversion, Francesco Abeni, programmazione.html.it [9] The Best Continuous Integration Tools,Vlad Kofman http://www.developer.com/ [10] Hibernate, Wikipedia http://it.wikipedia.org/wiki/Hibernate [11] Hibernate, Reference http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/