Direzione Sistemi Informativi Portale e Orientamento Allegato n. 2 al Capitolato Tecnico Indice Architettura Connettore Alfresco Share 1. Architettura del Connettore... 3 1.1 Componente ESB... 4 1.2 COMPONENTE WEBSCRIPTS... 6
1. Architettura del Connettore Il Connettore è stato progettato secondo l architettura Service Oriented (SOA) che rende interoperabili Alfresco e i Servizi Unito e utilizza la logica EIP (Enterprise Integration Pattern) che definisce un pattern standard di sviluppo per la creazione di componenti atti all integrazione di più sistemi. In particolare il Connettore si occupa di interagire con i servizi esposti da UNITO per recuperare le informazioni necessarie e con i servizi di Alfresco per comunicare al sistema le variazioni relative a Siti ed Utenti. Il Connettore è composto da due componenti: un Bundle OSGI che ha il compito di colloquiare sia con i servizi Unito, sia con i Webscript di Alfresco; quest ultimi sono dei servizi sviluppati ad hoc che si interfacciano con le API standard di Alfresco e che racchiudono in un unico servizio tutte le operazioni necessarie ad eseguire la sincronizzazione fra i due sistemi. Il Connettore va ad operare in un architettura dove gli attori in gioco sono Alfresco che con il suo modulo dei Webscripts permette di interagire con i propri dati presenti nel repository ed i servizi UNITO che espongono i dati relativi alle Unità Organizzative e agli Utenti. Alfresco fornisce di default alcuni Webscripts che vengono sfruttati da Share e dagli Utenti di Share in maniera trasparente, dall altra parte troviamo i servizi UNITO esposti all esterno attraverso degli endpoint di tipo HTTP che comunicano tramite linguaggio JSON. In questo scenario il connettore con le sue due componenti effettua delle chiamate HTTP verso l attore UNITO per reperire informazioni e verso i servizi di Alfresco tramite la componente Webscript. Le due componenti facenti parte del connettore comunicano tra di loro attraverso il protocollo HTTP scambiandosi dati sotto forma di oggetti Java serializzati. L architettura è schematizzata nella figura sottostante:
1.1 Componente ESB Il motore utilizzato dalla componente ESB è quello di Apache ServiceMix. Si tratta di un ESB (Enterprise Service Bus) che adotta come motore di messaggistica interna Apache Camel che mette a disposizione per lo sviluppo componenti aderenti allo standard EIP. La componente ESB si suddivide a sua volta in 5 componenti denominati nello standard Camel Processor che sono rappresentati nel diagramma EIP (Enterprise Integration Pattern) sottoforma di Content Enricher e di Content Trasformer, in quanto attraverso le loro funzioni aggiungono nuovi dati a quelli presenti e li trasformano per essere utilizzati dal processor successivo. Come si può vedere dal diagramma successivo, i componenti Camel che compongono il Connettore sono: ReadTimestampProcessor: si occupa di recuperare da un file su disco il valore relativo al timestamp della precedente esecuzione e di passarlo al processor successivo. SitesProcessor: riceve dal precedente processor l eventuale timestamp da utilizzare per richiamare il servizio relativo alle strutture organizzative esposto da Unito (UNITO Sites API). Si occupa inoltre di trasformare i dati ricevuti in un formato digeribile dall apposito webscript che verrà chiamato per calcolare le differenze fra le strutture organizzative esistenti in Alfresco e lo stato attuale. Infine userà le informazioni ricevute per riorganizzare i dati relativi ai RIF da passare al processor successivo.
UsersProcessor: riceve dal processor precedente le informazioni relative agli amministratori dei siti attuali, in modo da unirle alle informazioni recuperate tramite una chiamata al servizio relativo agli utenti esposto da Unito (UNITO Users API). Inoltre, computa queste informazioni e le trasforma in un formato adatto al webcript corrispondente, il quale si occupa di creare/aggiornare/disabilitare gli utenti in base alle informazioni ricevute. Infine questo processor si occupa di trasmettere al successivo le informazioni relative ai RIF ricevute al passo precedente. RemoveRifProcessor: riceve le informazioni relative ai Rif da eliminare e le trasforma in un formato leggibile per il corrispettivo webscript che si occupa di eseguire fisicamente le operazioni di rimozione dei RIF dai siti a cui non appartengono più. WriteTimestampProcessor: l ultimo processor della Rotta si occupa di sovrascrivere il timestamp su filesystem di modo che tale dato venga riutilizzato alla prossima esecuzione. Il messaggio iniziale identificato come trigger sta ad indicare che il connettore viene avviato in maniera temporizzata da un componente Camel denominato proprio Trigger che si occupa di avviare la rotta Camel secondo un espressione CRON che può essere configurata a piacimento. Le operazioni che vengono eseguite dalla componente ESB e la loro sequenza sono riassunte nel Sequence Diagram riportato di seguito:
1.2 COMPONENTE WEBSCRIPTS Oltre alla componente ESB il connettore è composto da una serie di Webscript che si occupano di eseguire le operazioni necessarie sul repository di Alfresco, tramite le librerie e le interfacce messe a disposizione, in modo da effettuare la sincronizzazione con i dati ricevuti dal componente ESB. Ogni Webscript è composto da un file xml di descrizione che ne identifica la tipologia ed i parametri necessari all esecuzione, come la url e l eventuale livello di autenticazione richiesta; una classe Java che implementa la logica del Webscript, denominata Controller ed un file template FreeMarker, che può essere omesso, il quale viene utilizzato per definire la formattazione dei dati di uscita secondo il formato di risposta definito nella request. Di seguito l architettura generale dei Webscripts in Alfresco
1. A request for a given URI arrives at the Web Script Runtime. 2. The Runtime finds the appropriate Web Script for the URI. If one is found, the Runtime executes the Web Script but only after successfully authenticating first, if required. The first step of execution is to invoke the JavaScript bound into the Web Script. 3. With JavaScript, you have access to a set of Alfresco services. When hosted within the Repository server you can search for information, navigate around the repository, modify information, create new documents, set properties on those documents, move data around, and delete data, plus access to all other Repository services. Outside of the Repository you can invoke remote services such as those by the Repository server. 4. The results from the JavaScript are rendered using FreeMarker response templates. The response format may be one of HTML, ATOM, XML, RSS, JSON, CSV, or any combination of these. You must provide the appropriate templates. 5. The Web Script Runtime sends the rendered results back via a response using the same protocol as the URI request. 6. The Web Script client receives the response in the requested format. Nel caso del connettore i Webscript comunicano attraverso la serializzazione di oggetti Java per cui non necessitano di file template in uscita, in quanto restituiscono direttamente al chiamante l oggetto Java di risposta. La componente di Webscript del connettore è composta da 3 servizi che corrispondono alle operazioni
richieste da ogni processor del componente ESB: CreazioneSitoWebscripts: questo Webscript si occupa di ricevere la lista delle Unità Organizzative recuperata dai servizi del sistema UNITO e di effettuare il confronto con i siti attualmente presenti in Alfresco. Nel caso in cui un unità organizzativa non abbia il corrispondente Sito su Alfresco Share, il Webscript si occupa di crearlo e di creare anche i gruppi utenti che serviranno nelle fasi successive per il popolamento degli utenti nei siti e per configurare in maniera opportuna i permessi di accesso al sito. Nel caso in cui un unità organizzativa ha già un corrispondente sito su Alfresco Share il Webscript si occupa di aggiornare le informazioni relative. Infine se un unità organizzativa non è più presente nel sistema UNITO, il Webscript si occupa di rimuovere tutti gli utenti dal sito corrispondente, in maniera da renderlo inaccessibile a tutti meno che agli amministratori di sistema. CreazioneUtenteWebscripts: questo Webscript si occupa di effettuare la sincronizzazione dei dati utenti ricevuti dal componente ESB con i dati degli utenti presenti in Alfresco. Il Webscript ha la possibilità di creare, modificare, disabilitare o riabilitare un utente su Alfresco a seconda delle differenze che riscontra fra i dati attuali e quelli storicizzati. La creazione avviene se un nuovo utente viene recuperato sui sistemi Unito, la modifica avviene per tutti quegli utenti, i quali non hanno modificato il loro status, che sono sul sistema UNITO ed hanno il corrispondente utente creato su Alfresco. Infine le operazioni di disabilitazione/riabilitazione si rendono necessarie per quegli utenti già esistenti in Alfresco che hanno modificato il loro status rispetto all ultima sincronizzazione. Il Webscript si occupa anche di collegare gli utenti ai siti delle rispettive Strutture Organizzative, gestendo eventuali cambiamenti intercorsi fra un esecuzione e l altra e tenendo conto di quegli utenti con permessi speciali denominati RIF che hanno il privilegio di assumere il ruolo Manager nei siti corrispondenti. RimozioneAdminDaSitiWebscripts: questo Webscript ha solo funzione di intervenire sulle operazione precedenti in quanto serve a rimuovere l utente amministratore dai siti creati dal CreazioneSitoWevrscipt, in quanto fino alla successiva sincronizzazione degli utenti non è possibile rimuovere tale utente a causa del vincolo di Alfresco che non permette di avere siti senza utenti manager.