ECM

Liferay Model Listeners ovvero trigger a livello applicativo

Intercettare una modifica del modello di oggetti (ORM) e scatenare conseguentemente un’azione.

E’ questo il comportamento, del tutto simile ai trigger a livello DBMS, che possiamo implementare utilizzando i Model Listeners di Liferay.

liferay

Vediamo quali passi compiere per raggiungere l’obiettivo nel caso di implementazione di un model listner per un oggetto esistente necessario all’architettura del prodotto.

Prendiamo ad es. il JournalArticle e proviamo a “fare qualcosa” ogni qualvolta viene inserito un nuovo Web Content.

Passo 1

Creare un Plug-in di tipo Hook

Model Listener

Passo 2

Aprire il file liferay-hook.xml e mediante la widzard impostare il nome della classe, che andremo ad implementare al Passo 3, che deve “sovrascrivere il comportamento” di default per il Model Listner della JournalArticle nella opportuna proprietà del portal.properties

liferay-hook.xml

Al termine di questo passo dovremmo trovarci i seguenti file.

liferay-hook.xml

<?xml version="1.0"?>
<!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 6.2.0//EN" "http://www.liferay.com/dtd/liferay-hook_6_2_0.dtd">

<hook>
    <portal-properties>portal.properties</portal-properties>
</hook>

portal.properties

value.object.listener.com.liferay.portlet.journal.model.JournalArticle=it.alessandronizzo.model.listeners.JournalArticleListener

Passo 3

Implementare il Model Listner estendendo BaseModelListener<JournalArticle>

package it.alessandronizzo.model.listeners;

import com.liferay.portal.ModelListenerException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.model.BaseModelListener;
import com.liferay.portlet.journal.model.JournalArticle;

public class JournalArticleListener extends BaseModelListener<JournalArticle> {

		private static Log _log =LogFactoryUtil.getLog(JournalArticleListener.class);	

		public void onAfterCreate(JournalArticle journalArticle) throws ModelListenerException {

			_log.info("E' stato creato un nuovo articolo");

		}
}

Passo 4

Testare il funzionamento deployando l’hook ed inserendo un nuovo web content. Se tutto è andato bene dovremmo vedere qualcosa di simile nel log di catalina

...
Informazioni: Initializing Spring root WebApplicationContext
08:51:59,315 INFO  [localhost-startStop-3][HookHotDeployListener:687] Registering hook for JournalArticleListner-hook
Loading file:/Users/box/Documents/Liferay-dev/bundles/tomcat-7.0.42/temp/10-JournalArticleListner-hook/WEB-INF/classes/portal.properties
08:51:59,320 INFO  [localhost-startStop-3][HookHotDeployListener:814] Hook for JournalArticleListner-hook is available for use
08:52:53,211 INFO  [http-apr-8080-exec-10][JournalArticleListener:15] E' stato creato un nuovo articolo

Il prossimo step è quello di creare un Model Listener per una entità sviluppata ad hoc per un Plugin di Liferay.

Spero di riuscirlo a condivedere in un futuro articolo.