Liferay 7: Come accedere a servizi OSGi da portlet JSF

Dal titolo dell’articolo è molto chiaro l’obiettivo prefissato, anche se in realtà, questo vuole essere un’integrazione alla documetazione ufficiale di Liferay, che riporta nell’apposita sezione JSF Portlets with Liferay Faces => Services in JSF, come poter accedere ai servizi basati su OSGi da una portlet JSF. La necessità d’integrazione nasce dal fatto che, la documentazione omette come trattare le dipendenze necessarie affinche sia possibile sfruttare i servizi OSGi e installare correttamente la portlet.

Quando si crea una portlet JSF su Liferay 7, via command line o via IDE, le dipendenze sono quelle indicate sul file build.gradle a seguire (e in questo caso particolare è stato deciso di utilizzare Primefaces).

Quando dobbiamo accedere a servizi basati su OSGi dalla nostra portlet JSF, così come spiegato sulla documentazione di Liferay, è sufficiente utilizzare il ServiceTracker, questo fa parte del framework core di OSGi. Alfine di porter utilizzare il ServiceTracker sul nostro progetto, dobbiamo aggiungere un’ulteriore dipendenza al build.gradle. La dipendenza da aggiugere è org.osgi.core.

Quando usiamo il plugin Gradle war, abbiamo la possibilità di dichiarare le dipendenze come providedCompile per istruire il compilatore in modo che includa tali dipendenze nel classpath di compilazione ma di non fare in modo che Gradle le includa nell’artefatto war pacchettizzato.

Dichiarare come providedCompile la dipendenza org.osgi.core è molto importante, in caso contrario, il deploy del plugin fallirà. Se fate attenzione, il build.gradle, include anche la dipendenza com.liferay.portal.kernel dichiarata come providedCompile. Queste due dipendenze sono disponibili sul sistema, non è quindi necessario includerle nell’artefatto war del nostro plugin.

Il build.gradle, riporta la dipendenza com.liferay.portal.kernel perchè richiesta dall’esempio di codice mostrato sulla documentazione di Liferay che utilizza il servizio UserLocalService.

Il build.gradle così fatto, genera un artefatto war corretto che potrà essere installato senza senza errori sulla propria istanza Liferay 7.

Per la felicità di Voi Lettori, ho preparato un progetto semplice ma completo di una portlet JSF + Primefaces che accede al servizio OSGi UserLocaService attraverso il ServiceTracker al fine di mostrare il numero di utenti registrati sul proprio sistema Liferay.

In Figura la portlet di esempio che mostra oltre le versioni dei framework JSF anche il numero degli utenti registrati sulla propria istanza di Liferay.

Liferay 7 JSF + Primefaces Portlet to access OSGi Services

Liferay 7 JSF + Primefaces Portlet to access OSGi Services

Abbiamo fatto riferimento a Gradle come sistema di build ma lo stesso vale anche per maven, dove lo scope per le due dipendenze in particolare è provided.

Siamo arrivati alla fine di quest’articolo che spero sia stato utile. A questo punto posso anche svelare che l’idea dell’articolo è nata dalla specifica domanda di un lettore che non riusciva a fare funzionare l’esempio indicato sulla documentazione di Liferay.

3 Condivisioni

Antonio Musarra

I began my journey into the world of computing from an Olivetti M24 PC (http://it.wikipedia.org/wiki/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until … Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.

Potrebbero interessarti anche...

Cos'è il progetto CIE/CNS Apache Docker - Developers Italia

In questo video https://youtu.be/TcAzn1POhsM introdurrò il progetto CIE/CNS Apache Docker di Developers Italia (https://developers.italia.it/it/cie/#resourcecontent-3) nato circa due anni fa.

L'obiettivo di questo progetto è quello di fornire un template pronto all'uso che realizza un sistema di autenticazione tramite la Smart Card TS-CNS (o CNS) e la CIE (Carta d'Identità Elettronica) basato su Apache HTTP. Ognuno può poi modificare o specializzare questo progetto sulla base delle proprie esigenze Si tratta di un progetto docker per la creazione di un container che implementa un sistema di mutua autenticazione o autenticazione bilaterale SSL/TLS.

Questo meccanismo di autenticazione richiede anche il certificato digitale da parte del client, certificato che in questo caso risiede all'interno della TS-CNS o della CIE. La particolarità del sistema implementato (attraverso questo container) è quella di consentire l'autenticazione tramite:

  • La TS-CNS (Tessera Sanitaria - Carta Nazionale Servizi), rilasciata dalla regione di appartenenza;
  • La CIE (Carta d'Identità Elettronica), rilasciata dal comune di residenza.

Nella versione 2.0.0 il progetto è stato aggiornato per essere uniforme alle linee guida di Bootstrap Italia. A seguire alcune risorse che possono essere utili.

  • Cos’è il progetto CIE/CNS Apache Docker (http://bit.ly/3aJ5Gbl)
  • CIE Carta d'Identità Elettronica (https://developers.italia.it/it/cie/)
  • Carta Nazionale dei Servizi (https://www.agid.gov.it/it/piattaforme/carta-nazionale-servizi)
  • Raspberry Pi – Un esempio di applicazione della TS-CNS (https://bit.ly/3hkJ8Aj)
  • Pubblicare il servizio CIE/CNS Apache Docker su Azure Cloud (http://bit.ly/3aPoq8V)
  • Come accedere al portale VETINFO tramite TS-CNS e Mac OS (http://bit.ly/2VFMKq7)