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.

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...