Per interfacciarsi con i servizi IGRUE, il MEF propone alle altre Amministrazioni un’applicazione J2EE denominata “Sender” che unifica le funzioni di proxy applicativo e di Porta di Dominio SPCoop.
I sistemi applicativi locali, invocando i Web Service esposti dal Sender, attivano processi asincroni che gestiscono l’invio del file di attuazione verso il sistema centrale, la raccolta degli esiti dell’invio del file, lo scarico dei dati delle tabelle di contesto.
Il Sender semplifica l’interfaccia del Servizio IGRUE per i Sistemi Locali dell’Ente, rispetto all’uso diretto dei servizi esposti dal sistema centrale. Infatti i servizi di esito e l’operazione di invio dei file di attuazione sono trasparenti per il sistema locale. Inoltre le operazioni richieste al sistema locale per l’invio dei dati di attuazione sono principalmente: a) copiare il file zip in una determinata area del file system; b) invocare il servizio web PrenotazioneTicket fornendo in input l’identificativo dello zip file; c) recuperare i risultati dell’invio in una determinata area del file system. In questo modo l’invocazione di un unico Web Service permette di evitare le 6 comunicazioni SPCoop richieste per la comunicazione diretta verso il sistema centrale (prenotazioneTicket, invio file, quattro operazioni per raccolta esiti).
L’architettura del Sender è descritta in figura.
Architettura del Sender del servizio IGRUE
Tuttavia l’uso del Sender presenta una serie di limitazioni:
- Questo approccio, che integra le funzioni di PdD, può essere utile per gli enti che non dispongono ancora di una propria PdD, ma è controindicato per chi ha già una propria PdD che, in questo modo, viene scavalcata.
- Dipendenza dal Database Oracle 10g e dalla PdD Oracle.
- Dipendenza dall’application server WebSphere 6.1 o da Jboss <= 4.0.2.
- Il Sistema Locale deve implementare i client dei Web Service del Sender.
Per questo motivo si ritiene opportuno implementare il servizio sulla base di un nuovo proxy applicativo alternativo al Sender, che chiameremo Proxy IGRUE, in grado di replicarne i vantaggi superandone però le limitazioni.
Le linee guida progettuali per lo sviluppo del Proxy IGRUE sono le seguenti:
- Il Sistema Locale per interfacciarsi verso il Sistema Centrale utilizza esclusivamente il file system.
- Il ProxyIGRUE consulta il file system e una base di dati per capire le operazioni che deve effettuare.
- Il ProxyIGRUE costruisce i messaggi SOAP necessari per l’invocazione del sistema centrale ed invoca le porte delegate della PdD dell’Ente.
- La PdD dell’ente dialogherà con il sistema centrale tramite SPCoop.
Come prerequisiti devono essere noti l’identificativo del sistema locale ed il codice dell’amministrazione per cui l’applicazione deve operare.
Funzionalità
Il file system su cui opera il Proxy IGRUE ha la seguente struttura:
- OUTBOX: contiene i file zip con i dati di attuazione che l’ente desidera spedire. Ogni file zip deve possedere un nome univoco rappresentato da un codice incrementativo (es. 234.zip, 1567.zip)
- INBOX: contiene le informazioni relative ai dati di attuazione spediti verso il sistema centrale. Sarà formata da tante directory (con il nome del file zip inserito in OUTBOX) quanti sono i file gestiti o in corso di gestione dal proxy igrue (es. 234/ , 1567/). Le directory interne saranno cosi’ strutturate:
- File zip contente i dati di attuazione spediti verso l’ente principale
- INFO.txt: contiene le informazioni relative alla spedizione (es. Ticket utilizzato)
- RISULTATI: contiene gli esiti (formato zip) che il proxy IGRUE ha scaricato dal sistema centrale
- EVENTI: contiene gli eventi (formato txt) che il proxy IGRUE ha scaricato dal sistema centrale
- TIPI_EVENTI: contiene la zzclassificazione dei tipi di evento che il proxy IGRUE ha scaricato dal sistema centrale (e che mantiene aggiornata).
- CONTESTO: contiene i files zip con le tabelle di contesto che il proxy IGRUE ha scaricato dal sistema centrale. Se il proxy IGRUE si accorge di una modifica ad una tabella di contesto provvede ad aggiornare il file corrispondente.
L’upload di un file nell’OUTBOX fa scaturire automaticamente l’invio di dati di attuazione (con negoziazione del ticket).
Il Proxy effettua automaticamente il download degli esiti relativi ad invii di dati, e fornisce tali esiti in directory predefinite.
Il Proxy effettua automaticamente il download degli eventi, sia di carattere generale, che relativi ad un singolo ticket, e fornisce tali eventi nella directory EVENTI. Una volta scaricati, gli eventi vengono cancellati dal sistema centrale.
I dati di contesto vengono scaricati dal ProxyIGRUE automaticamente e memorizzati nella directory CONTESTO.
Ci sono tuttavia alcuni aspetti da chiarire:
- Come avviene la negoziazione dei codici di Procedura Attivazione? Alcune soluzioni possibili sono: a) negoziazione effettuata dal proxy IGRUE e modifica dello zip per inserire il codice prima dell’invio verso il sistema centrale; b) definizione di una modalità di inserimento di tale codice; c) implementazione di uno strumento (web service, interfaccia grafica, file system) utilizzabile dal sistema locale per ottenere un codice di procedura attivazione, sarà poi il sistema locale ad inserirlo nello zip file, in questo caso il Proxy IGRUE non deve modificare il file zip.
- Come memorizzare gli eventi? Gli eventi vengono ritornati dal sistema centrale nel body applicativo, ma in un body applicativo possono essere presenti più eventi.
Architettura
L’architettura del Proxy IGRUE è mostrata in figura.
Architettura del Proxy Applicativo IGRUE
Più nel dettaglio l’architettura è formata dai seguenti moduli:
- Modulo di Spedizione dei Dati di attuazione
- Modulo di Raccolta Esiti
- Modulo di Raccolta degli Eventi
- Modulo di Raccolta delle Tabelle di Contesto
- Modulo di Controllo della Consistenza dei dati
Il Proxy IGRUE utilizza un database per mantenere:
- Mapping tra codice file zip da spedire e ticket assegnato dal sistema centrale;
- Stato dell’invio e della raccolta informazioni di un ticket;
- Fornire una scadenza di validita temporale ad un’operazione;
- Stato della raccolta delle tabelle di contesto.
NOTA: le varie operazioni sono gestite in maniera transazionale, controllando che eventuali imprevisti software/hardware non rendano inconsistente l’area dati su filesystem e il database.
I vantaggi di questa nuova soluzione sono i seguenti:
- Ambiente di riferimento Open Source:
- Database Postgresql
- Application Server Jboss 4.x/5.x
- Porta di Dominio OpenSPCoop
- Il sistema locale non è obbligato ad implementare applicazioni WebService come dovrebbe usando il sender, ma può invece limitarsi a trasferimenti di file via file transfer.
Modulo di Spedizione dei Dati di attuazione
Si tratta di un Timer EJB che si occupa di effettuare polling sulla directory OUTBOX in cerca di file zip da spedire.
Ad ogni file XX.zip corrisponderanno le seguenti azioni:
- Negoziazione ticket con il sistema centrale (invocazione PortaDelegata).
- Creazione Directory XX nell’area INBOX, creazione delle sottocartelle RISULTATI, EVENTI, creazione del file INFO.txt contenente il ticket negoziato e copia del file XX.zip.
- Creazione nel database del mapping tra XX e il ticket appena negoziato.
- Creazione MessaggioSOAP With Attachments per l’invio dei dati di attuazione formato dal body contenente il ticket, e da un allegato contenente il file XX.zip
- Spedizione dati di attuazione (Invocazione PortaDelegata).
- Completamento operazione, rimuovendo il file XX.zip dall’area OUTBOX.
Modulo di Raccolta Esiti
Si tratta di un Timer EJB che si occupa di effettuare polling sul database in cerca degli invii per cui non sono ancora stati raccolti gli esiti.
Gli esiti da raccogliere sono divisi in quattro categorie: StatisticheElaborazioni, StatisticheScarti, EsitoElaborazionePerAnagraficaDiRiferimento e LogDegliErrori.
La raccolta di una categoria di esito avviene tramite l’invocazione di una PortaDelegata.
Gli esiti ottenuti in seguito all’invocazione di una PortaDelegata vengono memorizzati nella directory INBOX/<ID_INVIO>/RISULTATI dell’invio in gestione.
L’avvenuta raccolta di una categoria, viene memorizzata nel database, in modo che un successivo polling del timer si limiti a raccogliere le categorie di esiti rimaste.
Modulo di Raccolta degli Eventi
Si tratta di un Timer EJB che si occupa di effettuare polling sul database in cerca degli invii ancora in gestione (non scaduti).
Per ogni ticket trovato, viene controllato se sono presenti eventi sul sistema centrale, attraverso l’invocazione di una Porta Delegata.
Gli eventuali eventi ottenuti in seguito all’invocazione di una PortaDelegata vengono memorizzati nella directory INBOX/<ID_INVIO>/EVENTI dell’invio in gestione.
Una volta memorizzati gli eventi, questi vengono eliminati dal sistema centrale tramite l’invocazione di un altra PortaDelegata.
Ad intervalli regolari il timer si occupa anche di recuperare la lista delle tipologie di evento e di memorizzare tale lista nella directory EVENTI/TIPI.
Modulo di Raccolta delle Tabelle di Contesto
Si tratta di un Timer EJB che si occupa di effettuare ad intervalli regolari il download delle tabelle di contesto dal sistema centrale attraverso l’invocazione di una Porta Delegata.
Le tabelle di contesto vengono scaricate nella directory CONTESTO solo se risultano aggiornate rispetto ad un precedente download.
Il controllo di aggiornamento si basera su checksum, che viene associato al salvataggio delle tabelle di contesto.
Modulo di Controllo della Consistenza dei dati
Si tratta di un Timer EJB che si occupa di verificare la consistenza dei dati memorizzati su database. Verifica anche eventuali record scaduti e provvede all’eliminazione.