Blog

Approfondimenti, eventi, formazione
Indietro

Liferay Data Handler

In questo post parliamo del Data Handler disponibile in Liferay, un gestore dei dati, confinati a loro volta all'interno di un portlet per i processi di importazione ed esportazione.

Per poter sfruttare i meccanismi di import ed export messi a disposizione della versione 6.2 di Liferay, è necessario definire per ciascun portlet custom un gestore di dati dedicato. Il data handler si occuperà  dell'importazione ed esportazione delle entità ad esso correlate.

Per la sua realizzazione, è necessario effettuare le seguenti azioni:

  1. Creare la classe che rappresenta il data handler del portlet. La classe dovrà estendere la classe astratta BasePortletDataHandler.
  2. Per ciascuna entità gestita all'interno del portlet, creare una classe "staged data handler"  che è necessario includere all'interno dei processi di esportazione ed importazione. L'entità "System Event" consente di tenere traccia dei dati eliminati, e di ribaltare le modifiche effettuare in ambiente di staging sull'ambiente live. 
  3. Includere le classi appena create all'interno della definizione del portlet in liferay-portlet.xml:

<portlet>
        <portlet-name>1</portlet-name>
        <icon>/icons/admin.png</icon>
        ...
        <portlet-data-handler-class>
            it.vivieb.liferay.helpdesk.admin.lar.AdminPortletDataHandler
        </portlet-data-handler-class>
        <staged-model-data-handler-class>
            it.vivieb.liferay.helpdesk.admin.lar.HDProductStagedModelDataHandler
        </staged-model-data-handler-class>
        ...

La scelta di gestire lo staging e l'export / import tramite la scrittura di due livelli di hander, uno generale e l'altro legato alle singole entità, è una scelta mirata a gestire meglio la complessità del codice.
In questo modo il data handler del portlet gestisce la pubblicazione, l'import e l'export più ad alto livello, mentre le singlole classi StagedModelDataHandler descrivono il comportamento specifico delle singole entità coinvolte.

Processo di staging

Portlet data handler

Nella versione 6.2 di Liferay, queste classi hanno il solo ruolo di interrogare e coordinare le chiamate tra i vari "staged data handler".

Creare la classe PortletDataHandler per la gestione del portlet dell'applicazione all'interno dei processi di importazione ed esportazione. Questo consentirà di visualizzare la voce corrispondente nel pannello di Import / Export. La classe dovrà estendere la classe astratta BasePortletDataHandler.

Nel costruttore:

  • Definire il data level con lo scope di site (per distinguerlo da quello di company)
  • Impostare le classi (entità) per le quali gestire la pubblicazione della cancellazione. Questo consentirà di selezionare eventuali cancellazioni da includere o escludere dalla pubblicazione. 
  • Impostare i dettagli relativi alla visualizzazione della check box nel menù di esportazione.
  • Definire per ciascuna entità il namespace, il nome del controllo da mostrare, la modalità con cui si presenta di default (senza la spunta per helpdesk) e se disabilitarlo di default.
  • È possibile informare il data handler che esiste anche la parte staged (approfondire, verificare nel video) / è possibile definire dei child element che verranno visualizzati in check box indentate, e che è possibile correlare all'esportazione dell'entità padre. Questo non è obbligatorio dato che l'importazione può essere fatta secondo due modalità:
    • Importazione da lar utilizzando un unico data handler
    • Utilizzando la parte staged 
  • Gestire le eventuali dipendenze gerarchiche tra entità

Nel metodo doPrepareManifestSummary si gestisce la creazione del MANIFEST, ovvero del file che contiene le informazioni relative ai dati che stiamo esportando.

Per ciascuna delle entità gestite all'interno del nostro portlet, si effettua il conteggio degli elementi che stiamo esportando, delegando le singole azioni alle classi *ExportActionableDynamiQuery corrispondenti. I risultati ottenuti vengono memorizzati nel portletDataContext che contiene le informazioni di contesto (valorizzato nel costruttore per ciascuna classe *ExportActionableDynamicQuery).

Il metodo meno oneroso per il conteggio dei record di entità è una dynamic query che effettua il perform count. La dynamic query non è altro che la costruzione di una query SQL tramite istruzioni java.
Le classi *ExportActionableDynamicQuery vengono generate in automatico con il build service sulle entità custom (esiste una discriminante per la generazione tipo l'uuid? Verificare nel video di Mariuzzo).

Staged data handler

La possibilità di coinvolgere delle entità al meccanismo di staging fa affidamento sul fatto che esse contengano un determinato set di informazioni. Queste informazioni aiutano il processo ad identificare, ad esempio, se un'entità deve essere pubblicata oppure no sulla base della data di ultima modifica.

L'interfaccia StagedModel rappresenta un marker a cui le entità generate tramite service builder vengono associate, dove possibile. I dati che espongono sono:

  • UUID
  • companyId
  • createDate
  • modifiedDate

L'interfaccia StagedGroupedModel è un'estensione della precedente che in più richiede la presenza del groupId.

Le Classi StagedModelDataHandler (conviene prefissarle con il nome dell'entità da gestire) si occupano quindi di gestire la pubblicazione e l'import / export relativamente alla singola entità. Dal punto di vista dell'interfaccia, ad esempio, visualizzano tra parentesi il numero di entità da esportare.

Per ogni entità da gestire, è necessario creare la classe "StagedModelDataHandler" dedicata. ovvero la classe per gestire la specifica entità, il dato staged.

Esportazione

Cliccando sul tasto "Export" viene avviato un processo di esportazione in background (background task).

Lo stato di avanzamento è visibile in una tab distinta ("Current and Previous") rispetto a quella da cui viene richiesta l'esportazione ("New Export Process"), da cui sarà possibile effettuare il download distinto dei  lar creati.

Il MANIFEST conterrà le informazioni di esportazione con riferimento alle entità (standard Liferay) presenti nel file compresso. In particolare il tag <manifest-summary> conterrà una serie di tag <staged-model> con proprietà manifest-summary-key contenente il full qualified name dell'entità esportata e addition-count contenente il numero. Il tag <missing-references> dà informazioni su ciò che manca.

Il .lar esportato viene salvato in una cartella nascosta della Document and Media Library perché è un contenitore condiviso. Se lo memorizzassi in locale, su di un nodo di un cluster ad esempio, nel ricollegarmi potrei non trovare più il .lar precedentemente esportato.

Importazione

La classe PortletDataHandler si occupa della gestione del portale live. L'interfaccia di Import / Export interagisce con questa classe, non con lo staged. Lo staged viene pilotato dal framework.

Sulla base dei dati contenuti nel MANIFEST, l'implementazione del metodo doDeleteData consente di eliminare quei dati non più presenti nell'ambiente di staging (viene richiamato anche in caso di disattivazione dello staging).

 

Per ViVieb la possibilità di gestire correttamente il flusso dei dati, sia dai parte dei processi erogati dal portale, ma anche nell'integrazione con altri sistemi è fondamentale. Per questo le soluzioni fornite da ViVieb si integrano nella piattaforma Liferay Portal anche nell'utilizzo dei Data Handler, siamo in grado di gestire in modo appropriato i flussi di importazione, esportazione e staging dei dati. Anche l'integrazione con altri servizi a perimetro è garantita dalle caratteristiche tecniche offerte da Liferay.

Contattaci per saperne di più.

Contatta ViVieb!

Campo obbligatorio.
Campo obbligatorio.
Campo obbligatorio.
Campo obbligatorio.
Testo da Identificare Rigene CAPTCHA Rigene CAPTCHA

Autori Autori

Cristina Pepe
Messaggi: 3
Stelle: 0
Data: 15/06/18
Graziano Liberati
Messaggi: 23
Stelle: 0
Data: 29/11/17
Redazione ViVieb
Messaggi: 29
Stelle: 0
Data: 02/05/16