X
    Categories: blog

Liferay, episodio 3

Continuiamo il nostro percorso nello studio del framework Liferay.

Service Builder un componente fondamentale che serve a creare lo strato dei servizi.

Il Liferay Service Builder è un tool che genera il layer dei servizi alle portlet. Questo layer si occupa di tutte le interazioni con il DB ed effettua le operazioni di CRUD, riducendo il lavoro per gli sviluppatori. Vengono create in automatico classi java ed interfacce che implementano l’interazione logica con il db, come: connessione, insert, delete, update e select per primary key. Il Service Builder implementa il meccanismo DAO (Data Access Object) usando Spring e Hibernate.

Riprendendo il progetto della guida precedente, ora però partiamo dal file sotto WEB-INF: service.xml

In questo file si definiscono le entità, ossia i modelli da usare come oggetti nelle portlet, come POJO per la persistenza. In pratica ogni entità corrisponde ad una tabella a db. Si scelgono le colonne, definendo la primary-key, il nome della colonna e il tipo. Nel dtd sono definiti le caratteristiche di come si può comporre il file, ne consiglio una lettura per approfondire. Per ogni entità si possono creare i finder che generano le query di select automaticamente, scegliendo anche il tipo che si vuole ritornare.

Da console, ponendosi sotto la cartella jcitygov-example, dove si trova il pom.xml padre, dare il comando:

mvn clean liferay:buildservice

Al termine troverete generati diversi file, vediamo i principali.

  • infrastructure-spring.xml: recupera il data source, per configurarlo custom si possono utilizzare delle preferenze nel portal-ext.properties
  • hibernate-spring.xml: definisce i session factory per ogni portlet, ed è responsabile di caricare i modelli a livello delle portlet. Avere la sessione a livello di portlet limita gli accessi, differenziando le sessioni a livello db.
  • spring-portlet.xml: si configurano tutti i DAO e le classi Service
  • properties: tiene traccia delle build effettuate

Nella cartella sql vengono generati tutti gli script che servono per la generazione delle tabelle ed indici, sono file che utilizza Liferay, durante il deploy, per fare le operazioni di init delle tabelle e successive modifiche.

I package evidenziati sono le classi service generate, ma noi ci concentreremo in questo articolo al solo package *service.impl, sotto il progetto portlet, in cui ci sono i file per ogni entità che si occupa di creare i metodi/servizi da richiamare nei controller.

I developer di Liferay lo scrivono chiaramente: “MAI utilizzare nel controller direttamente questa classe, usare il file *LocalServiceUtil”, infatti noi in questi file ci limitiamo a creare i metodi e le logiche, ma nei controller, dopo una build-service, richiameremo i file con il metodo dalla NomeEntityLocalServiceUtil. Questo ci permette di poter richiamare il servizio, anche in altri progetti. Basterà inserire la dipendenza dal -service.jar, generato in compilazione.

Nell’esempio sopra, si vedono due metodi uno per aggiungere una riga nel db, ed un metodo per cercare tutti i parametri a db  con un determinato ordinamento. Il codice è molto semplice, grazie soprattutto al BuildService di Liferay che semplifica lo sviluppo. Cosa importante I file *LocalService hanno un meccanismo intrinseco per l’autenticazione, inoltre i metodi godono delle proprietà atomiche, quindi scegliere bene la granularità dei singoli metodi.

Ora provate voi a creare nuovi metodi per richiamarli nel controller, per esempio un metodo update o un finder sulla chiave primaria.

Michele Russo: Partenopeo, ingegnere Informatico. Lavoro come Software Engineer in Maggioli dal 2016 per l'area Portali, nello specifico JcityGov, portale per i servizi al cittadino. Amo tutto quello che contiene bit. La mia vita privata resta privata ;)
Related Post