Nel corso di quest’articolo vedremo come sia possibile sfruttare il Service Builder (Liferay Inc., 2014) per creare dei servizi da esporre all’esterno non direttamente collegati all’entità gestiste dallo specifico plugin.
Quello che vogliamo ottenere è quindi un servizio personalizzato chiamato Custom Users Service disponibile pubblicamente e che sfrutti i servizi core del portale. In questo particolare scenario vogliamo fare in modo che il servizio Custom Users Service, esponga un metodo che ritorni al consumer del servizio, la lista di utenti taggati con un determinato tag (Liferay Inc., 2014).
SugarCRM Enterprise Development Virtual ApplianceAntonio Musarra
In ambienti di tipo enterprise è ormai consuetudine consegnare “chiavi in mano” l’ambiente di sviluppo per il progetto al team di sviluppo. La standardizzazione degli ambienti di sviluppo e la produzione degli stessi tramite meccanismi d’automazione, aumenta l’affidabilità e sicurezza degli ambienti oltre che rendere più veloci i cicli di sviluppo e rilascio.
Nella fase di startup di un recente progetto ho dedicato la mia attenzione alla progettazione e realizzazione dell’architettura HA per SugarCRM. Una delle fasi del progetto prevedeva l’installazione di SugarCRM su un determinato stack software in linea con quanto indicato sul documento SugarCRM Supported Platforms, quest’operazione è stata “tradotta” poi con il build di una virtual appliance adatta a ospitare l’ambiente di sviluppo per SugarCRM 7.2 (nelle versioni commerciali attuali).
Nel corso di quest’articolo vedremo quindi le caratteristiche della virtual appliance realizzata per l’ambiente di sviluppo SugarCRM e come ottenere la stessa per importarla sul vostro ambiente virtualizzazione.
SugarCRM REST API: Un’applicazione in appena dieci minutiAntonio Musarra
Realizzare un’applicazione (semplice) HTML 5 (costruita veramente in dieci minuti) che interagisca con il sistema SugarCRM sfruttando le API REST.
Con gli strumenti adeguati abbiamo avuto modo di costatare come in questi ultimi anni in particolare sia divenuto semplice e quasi immediato realizzare applicazioni web, che interagiscono con servizi prettamente di tipo REST per attingere ai dati. L’utilizzo di framework commisurati al progetto influisce positivamente sul risparmio di tempo necessario per l’implementazione, non considerando ovviamente il tempo necessario per l’apprendimento dell’uso dello strumento.
Liferay Web Services - Come importare utenti da un foglio ExcelAntonio Musarra
Nel corso di quest'articolo vedremo come sia semplice e immediato utilizzare i Web Services di Liferay per importare una lista di utenti da un foglio Excel.
La distribuzione Liferay di default prevede l’utilizzo del data base HSQL (Hypersonic) per la persistenza dei dati. L’utilizzo di questo tipo di data base in ambienti di produzione non è però consigliato.
Nel corso di quest’articolo vedremo Step-by-Step come configurare il data base PostgreSQL per la persistenza dei dati di Liferay. Non saranno affrontanti temi di tuning e performance riguardo questa tipologia di configurazione.
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi StyleAntonio Musarra
Non sapete come realizzare un client SOAP in OSGi Style su Liferay 7?La risposta è il framework Apache CXF installato a bundle e poi OSGi Service Pattern.
SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.Antonio Musarra
Questo corposo articolo illustra in modo pratico come utilizzare lo strumento Scheduler di SugarCRM per implementare un caso d'integrazione dove due sistemi (uno dei quali è SugarCRM) scambiano un flusso dati XML all’interno del quale viaggiano i dati degli accounts che devono essere aggiornati o inseriti sul sistema di CRM.
L’articolo intende comunicare le informazioni base che riguardano gli hooks favorendo l’aspetto reale, in altre parole, far capire a cosa servono tramite l’esposizione e realizzazione di un caso di studio quanto più possibile vicino al reale. Sarà quindi presentato un caso d’integrazione che farà uso degli hooks, toccando i vari aspetti di personalizzazione. L’articolo sarà suddiviso in più episodi per evitare una “sbrodolata” d’informazione e rendere più efficace l’assimilazione di quanto esposto.
Esistono in giro soluzioni Open Source di ogni tipo che implementano Enterprise Service Bus (ESB), Liferay ha preferito non integrare al suo interno una delle soluzioni esistenti (il più delle volte pensanti) in favore di un proprio “piccolo message bus” che fosse in grado di far comunicare in modo semplificato i componenti del portale tramite lo scambio di messaggi. La versione 6.1 di Liferay ha migliorato di molto il Message Bus introducendo un più ricco insieme di service API che facilitano lo scambio dei messaggi tra le portlet e in generale tra i plugins.
SugarCRM Enterprise Development Virtual ApplianceAntonio Musarra
In ambienti di tipo enterprise è ormai consuetudine consegnare “chiavi in mano” l’ambiente di sviluppo per il progetto al team di sviluppo. La standardizzazione degli ambienti di sviluppo e la produzione degli stessi tramite meccanismi d’automazione, aumenta l’affidabilità e sicurezza degli ambienti oltre che rendere più veloci i cicli di sviluppo e rilascio.
Nella fase di startup di un recente progetto ho dedicato la mia attenzione alla progettazione e realizzazione dell’architettura HA per SugarCRM. Una delle fasi del progetto prevedeva l’installazione di SugarCRM su un determinato stack software in linea con quanto indicato sul documento SugarCRM Supported Platforms, quest’operazione è stata “tradotta” poi con il build di una virtual appliance adatta a ospitare l’ambiente di sviluppo per SugarCRM 7.2 (nelle versioni commerciali attuali).
Nel corso di quest’articolo vedremo quindi le caratteristiche della virtual appliance realizzata per l’ambiente di sviluppo SugarCRM e come ottenere la stessa per importarla sul vostro ambiente virtualizzazione.
SugarCRM REST API: Un’applicazione in appena dieci minutiAntonio Musarra
Realizzare un’applicazione (semplice) HTML 5 (costruita veramente in dieci minuti) che interagisca con il sistema SugarCRM sfruttando le API REST.
Con gli strumenti adeguati abbiamo avuto modo di costatare come in questi ultimi anni in particolare sia divenuto semplice e quasi immediato realizzare applicazioni web, che interagiscono con servizi prettamente di tipo REST per attingere ai dati. L’utilizzo di framework commisurati al progetto influisce positivamente sul risparmio di tempo necessario per l’implementazione, non considerando ovviamente il tempo necessario per l’apprendimento dell’uso dello strumento.
Liferay Web Services - Come importare utenti da un foglio ExcelAntonio Musarra
Nel corso di quest'articolo vedremo come sia semplice e immediato utilizzare i Web Services di Liferay per importare una lista di utenti da un foglio Excel.
La distribuzione Liferay di default prevede l’utilizzo del data base HSQL (Hypersonic) per la persistenza dei dati. L’utilizzo di questo tipo di data base in ambienti di produzione non è però consigliato.
Nel corso di quest’articolo vedremo Step-by-Step come configurare il data base PostgreSQL per la persistenza dei dati di Liferay. Non saranno affrontanti temi di tuning e performance riguardo questa tipologia di configurazione.
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi StyleAntonio Musarra
Non sapete come realizzare un client SOAP in OSGi Style su Liferay 7?La risposta è il framework Apache CXF installato a bundle e poi OSGi Service Pattern.
SugarCRM: Come realizzare un Custom Scheduler. Un esempio completo.Antonio Musarra
Questo corposo articolo illustra in modo pratico come utilizzare lo strumento Scheduler di SugarCRM per implementare un caso d'integrazione dove due sistemi (uno dei quali è SugarCRM) scambiano un flusso dati XML all’interno del quale viaggiano i dati degli accounts che devono essere aggiornati o inseriti sul sistema di CRM.
L’articolo intende comunicare le informazioni base che riguardano gli hooks favorendo l’aspetto reale, in altre parole, far capire a cosa servono tramite l’esposizione e realizzazione di un caso di studio quanto più possibile vicino al reale. Sarà quindi presentato un caso d’integrazione che farà uso degli hooks, toccando i vari aspetti di personalizzazione. L’articolo sarà suddiviso in più episodi per evitare una “sbrodolata” d’informazione e rendere più efficace l’assimilazione di quanto esposto.
Esistono in giro soluzioni Open Source di ogni tipo che implementano Enterprise Service Bus (ESB), Liferay ha preferito non integrare al suo interno una delle soluzioni esistenti (il più delle volte pensanti) in favore di un proprio “piccolo message bus” che fosse in grado di far comunicare in modo semplificato i componenti del portale tramite lo scambio di messaggi. La versione 6.1 di Liferay ha migliorato di molto il Message Bus introducendo un più ricco insieme di service API che facilitano lo scambio dei messaggi tra le portlet e in generale tra i plugins.
Con queste “14 misere” slide ho cercato d’introdurre Liferay e come iniziare con il piede giusto per affrontare lo sviluppo di applicazioni ai voi che siete proprio “novelli”. Spero di essere riuscito con questo primo episodio a suscitare la vostra curiosità e interesse.
Nel corso di queste poche righe vedremo quindi come sia possibile e semplice mettere SugarCRM proprio “dentro” Liferay. Ipotizzando uno scenario dove Liferay implementa un portale operativo da cui è possibile accedere a informazioni e procedure di un’ipotetica azienda, non sarebbe una cosa fuori dal comune, consentire l’accesso al CRM direttamente dal portale senza essere obbligati a dover aprire una nuova finestra del browser evitando anche la ripetizione dell’autenticazione.
Nel corso di quest’articolo vedremo come realizzare un client .NET per accedere alle informazioni registrate sul sistema di CRM e sfruttare il client come base per la realizzazione di una semplice applicazione .NET C# che sia in grado di eseguire una serie di operazioni elementari come: login, creazione di un nuovo contatto e recupero dati.
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...Antonio Musarra
In questo eBook sarà affrontato un argomento legato alla sicurezza che riguarda il come rendere sicure le connessioni HTTP attraverso il protocollo SSL/TLS (da ora in avanti TLS). Questo aspetto di sicurezza non è strettamente legato a Liferay, infatti non esiste nessun riferimento sulla LDN, riguarda invece l’infrastruttura dove il portale Liferay è collocato.
Il percorso che seguiremo nel corso di questo eBook per raggiungere il nostro obiettivo, sarà così organizzato:
1. Gestione dei certificati
2. Configurazione del protocollo TLS
3. Configurazione del portale Liferay (sia Apache Tomcat sia WildFly)
Le novità introdotte in TYPO3 CMS 7.3, nuova versione rilasciata il 16 giugno 2015.
A voi i commenti sulle nuove funzionalità introdotte, in attesa del rilascio LTS definitivo, che renderà questo cms ancora più veloce e stabile.
Come integrare Salesforce.com nel contesto OSGi di Liferay 7. Nel corso di questa presentazione (tenuta al #LRUGItaly 2017 di Bologna) sarà illustrata una soluzione d'integrazione di Salesforce.com tramite le API SOAP nel contesto OSGi di Liferay (e non solo, vedi Apache Karaf).
In questo breve articolo vedremo come sia possibile e semplice utilizzare le API di Pentaho Data Integration (Kettle) per eseguire dei Job in precedenza progettati con il designer Spoon . Non sarà oggetto di trattazione dell’articolo la parte di design che riguarda sia le Trasformazioni sia i Job. L’articolo è rivolto a chi già possiede buone conoscenze di base dell’architettura e del funzionamento di Kettle.
Allo User Group Italiano su Liferay di Bologna: Overview del futuro prossimo su Liferay.
OSGi (Open Service Gateway Initiative) è una specifica che permette di costruire applicazioni modulari a componenti (i Bundle) e che introduce una programmazione Service Oriented, permettendo una separazione tra interfaccia ed implementazione molto più rigorosa di quella nativa Java. Esistono diverse implementazioni (container) di OSGi, conformi alle specifiche.
Un breve talk per introdurre ad alcune funzioni native di Joomla! ( e del suo framework ) che ci permettono di riconsiderare il CMS a liverllo di sviluppo.
Nel corso di quest’articolo vedremo come realizzare un client Java per accedere alle informazioni registrate sul sistema di CRM, vedremo inoltre come realizzare una semplice applicazione Java che utilizzerà il client per eseguire una serie di operazioni elementari come: login, creazione di un nuovo contatto e recupero dati. Il sistema SugarCRM (SugarCRM Inc., 2004) espone all’esterno delle interfacce per l’accesso ai dati, queste interfacce supportano il protocollo SOAP e REST (SugarCRM Inc., 2010). La versione di SugarCRM cui faremo riferimento durante l’intero articolo è la 6.1 Community Edition (SugarCRM Inc., 2010).
Come portare il profiler di symfony2 in drupal8Luca Lusso
Molti progetti PHP open source hanno adottato Symfony2 come base per la loro prossima versione, tra questi c'è anche il CMS Drupal (http://drupal.org). In questo talk vedremo come scrivere un modulo per Drupal8 in modo da sfruttare il più possibile il suo nuovo motore Symfony2, dall'integrazione con il service container alla gestione degli eventi, dal routing a Twig. Verrà usato come esempio il modulo webprofiler (http://drupal.org/project/webprofiler) per dimostrare come un bundle per Symfony2 possa essere trasformato in un modulo per Drupal8 e integrato facilmente nel sistema.
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
Introduzione al framework Java Spring e Maven per realizzare API REST.
Breve introduzione all'uso di Maven per configurare un progetto SpringBoot e realizzare un server REST.
Disponibile il codice dimostrativo su github (link nelle slide, attenzione alle branch).
Valerio Radice (valix85)
Luglio 2017
Con queste “14 misere” slide ho cercato d’introdurre Liferay e come iniziare con il piede giusto per affrontare lo sviluppo di applicazioni ai voi che siete proprio “novelli”. Spero di essere riuscito con questo primo episodio a suscitare la vostra curiosità e interesse.
Nel corso di queste poche righe vedremo quindi come sia possibile e semplice mettere SugarCRM proprio “dentro” Liferay. Ipotizzando uno scenario dove Liferay implementa un portale operativo da cui è possibile accedere a informazioni e procedure di un’ipotetica azienda, non sarebbe una cosa fuori dal comune, consentire l’accesso al CRM direttamente dal portale senza essere obbligati a dover aprire una nuova finestra del browser evitando anche la ripetizione dell’autenticazione.
Nel corso di quest’articolo vedremo come realizzare un client .NET per accedere alle informazioni registrate sul sistema di CRM e sfruttare il client come base per la realizzazione di una semplice applicazione .NET C# che sia in grado di eseguire una serie di operazioni elementari come: login, creazione di un nuovo contatto e recupero dati.
Liferay SSL/TLS Security. Come configurare il bundle Liferay per abilitare il...Antonio Musarra
In questo eBook sarà affrontato un argomento legato alla sicurezza che riguarda il come rendere sicure le connessioni HTTP attraverso il protocollo SSL/TLS (da ora in avanti TLS). Questo aspetto di sicurezza non è strettamente legato a Liferay, infatti non esiste nessun riferimento sulla LDN, riguarda invece l’infrastruttura dove il portale Liferay è collocato.
Il percorso che seguiremo nel corso di questo eBook per raggiungere il nostro obiettivo, sarà così organizzato:
1. Gestione dei certificati
2. Configurazione del protocollo TLS
3. Configurazione del portale Liferay (sia Apache Tomcat sia WildFly)
Le novità introdotte in TYPO3 CMS 7.3, nuova versione rilasciata il 16 giugno 2015.
A voi i commenti sulle nuove funzionalità introdotte, in attesa del rilascio LTS definitivo, che renderà questo cms ancora più veloce e stabile.
Come integrare Salesforce.com nel contesto OSGi di Liferay 7. Nel corso di questa presentazione (tenuta al #LRUGItaly 2017 di Bologna) sarà illustrata una soluzione d'integrazione di Salesforce.com tramite le API SOAP nel contesto OSGi di Liferay (e non solo, vedi Apache Karaf).
In questo breve articolo vedremo come sia possibile e semplice utilizzare le API di Pentaho Data Integration (Kettle) per eseguire dei Job in precedenza progettati con il designer Spoon . Non sarà oggetto di trattazione dell’articolo la parte di design che riguarda sia le Trasformazioni sia i Job. L’articolo è rivolto a chi già possiede buone conoscenze di base dell’architettura e del funzionamento di Kettle.
Allo User Group Italiano su Liferay di Bologna: Overview del futuro prossimo su Liferay.
OSGi (Open Service Gateway Initiative) è una specifica che permette di costruire applicazioni modulari a componenti (i Bundle) e che introduce una programmazione Service Oriented, permettendo una separazione tra interfaccia ed implementazione molto più rigorosa di quella nativa Java. Esistono diverse implementazioni (container) di OSGi, conformi alle specifiche.
Un breve talk per introdurre ad alcune funzioni native di Joomla! ( e del suo framework ) che ci permettono di riconsiderare il CMS a liverllo di sviluppo.
Nel corso di quest’articolo vedremo come realizzare un client Java per accedere alle informazioni registrate sul sistema di CRM, vedremo inoltre come realizzare una semplice applicazione Java che utilizzerà il client per eseguire una serie di operazioni elementari come: login, creazione di un nuovo contatto e recupero dati. Il sistema SugarCRM (SugarCRM Inc., 2004) espone all’esterno delle interfacce per l’accesso ai dati, queste interfacce supportano il protocollo SOAP e REST (SugarCRM Inc., 2010). La versione di SugarCRM cui faremo riferimento durante l’intero articolo è la 6.1 Community Edition (SugarCRM Inc., 2010).
Come portare il profiler di symfony2 in drupal8Luca Lusso
Molti progetti PHP open source hanno adottato Symfony2 come base per la loro prossima versione, tra questi c'è anche il CMS Drupal (http://drupal.org). In questo talk vedremo come scrivere un modulo per Drupal8 in modo da sfruttare il più possibile il suo nuovo motore Symfony2, dall'integrazione con il service container alla gestione degli eventi, dal routing a Twig. Verrà usato come esempio il modulo webprofiler (http://drupal.org/project/webprofiler) per dimostrare come un bundle per Symfony2 possa essere trasformato in un modulo per Drupal8 e integrato facilmente nel sistema.
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
Introduzione al framework Java Spring e Maven per realizzare API REST.
Breve introduzione all'uso di Maven per configurare un progetto SpringBoot e realizzare un server REST.
Disponibile il codice dimostrativo su github (link nelle slide, attenzione alle branch).
Valerio Radice (valix85)
Luglio 2017
Grazie a Team Foundation Build è possibile adottare pratiche di integrazione continua nel proprio progetto. In questa presentazione viene introdotta la struttura di tfs build assieme alle tecniche base per effettuare una customizzazione della build.
jQuery Mobile è un framework per la creazione di applicazioni web mobile. Prima di iniziare a studiare jQuery Mobile, si dovrebbe avere una conoscenza di base di: HTML, CSS, jQuery. jQuery Mobile è un framework web ottimizzato per un uso touch per la creazione di applicazioni web mobile e funziona su tutti i sistemi più diffusi...
What's New in ASP.NET 4.5 and Visual Studio 2012Andrea Dottor
Slide e codice lo potete trovare a questo link:
http://blog.dottor.net/post/2012/09/18/Codice-e-slide-della-sessione-Whats-New-in-ASPNET-45-and-Visual-Studio-2012.aspx
Il Microsoft .NET Framework è in continua evoluzione, e con la prossima versione verranno rilasciate interessanti funzionalità riguardanti ASP.NET.All'interno di questa sessione conosceremo tutte queste novità, ed andremo invece più in dettaglio in alcune di esse, permettendo a chi conosce già ASP.NET di poter essere più produttivo (Strongly Typed Data Controls, Model Binding, Asynchronous, WebSocket, ... ), mentre, per chi invece non ha molta esperienza con questa tecnologia, potrà vedere come i nuovi template di progetto e Visual Studio 2012 potranno aiutarlo ad approcciare correttamente queste tipologie di applicazioni.
Enterprise Spring and Flex applicationsmarcocasario
SpringSource ha recentemente annunciato Spring BlazeDS Integration, un nuovo progetto open source per permettere una facile integrazione tra il framework Spring e Adobe BlazeDS, una tecnologia open source basata su server Java remoting e Web messaging.
Il plugin di SpringSource fornisce un approccio più semplice ed intuitivo agli sviluppatori Spring e Java per creare Enterprise Rich Internet Applications utilizzando il framework Adobe Flex, una pietra miliare della Flash Platform.
In questa sessione ai partecipanti verrà fornita una panoramica del framework Flex e di BlazeDS, illustrando i vantaggi e le modalità di integrazione al framework Spring attraverso il plugin Spring BlazeDS.
Presentazione del paradigma informatico tecnologico del Cloud Computing. Definizione, architettura, funzioni, servizi, vantaggi e svantaggi di questa innovazione che sta travolgendo l'IT.
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...Antonio Musarra
Vedremo come installare step-by-step TIBCO Jasper Reports Server 7.5 Community Edition su RedHat JBoss EAP 7.2, utilizzando CentOS 8.1 come sistema operativo e PostgreSQL come database server.
In questo tutorial vedremo come affrontare l'installazione di Jasper Reports Server senza l'ausilio dell'installer; questa è l'opzione solitamente adottata in ambiti enterprise.
I punti salienti di questo tutorial sono:
1. Quali sono i requisiti software
2. Quali sono i requisiti hardware
3. Download del software
4. Layout d’installazione
5. Installazione di OpenJDK 11
6. Installazione di PostgreSQL 10
7. Installazione di JBoss EAP 7.2.0
8. Configurazione & Installazione di Jasper Reports Server
9. Configurazione di JBoss EAP 7.2.0
10. Start di Jasper Reports Server
Come installare Liferay 7.2 GA2 su WildFly 16 + Oracle Database 19cAntonio Musarra
Nel corso di questo tutorial, vedremo come installare Liferay Portal 7.2 GA2 Community Edition su WildFly 16 con il supporto verso Oracle Database 19c.
Il supporto per WildFly 16 è stato aggiunto da Liferay 7.1 (vedi Matrice di Compatibilità -https://www.liferay.com/documents/10182/246659966/Liferay+DXP+7.1+Compatibility+Matrix.pdf/c8805b72-c693-1f26-3f2d-731ffc301366).
Il supporto per Oracle Database 19c è disponibile dalla versione 7.0 di Liferay.
Il repository GitHub liferay-portal-72-wildfly-16 (https://github.com/amusarra/liferay-portal-72-wildfly-16) contiene il layout d'installazione e i file di configurazione di Liferay e WildFly.
Nel caso in cui non abbiate un'istanza Oracle Database 19c disponibile, potreste creare la vostra da zero, per questo v'invito a leggere l'articolo How to setup Docker container Oracle Database 19c for Liferay Development Environment (http://bit.ly/2UlwRBN).
Potete guardare il video tutorial direttamente dal mio canale YouTube https://youtu.be/u4tOg5sFulY
Non esitate al lasciare i vostri feedback su questo tutorial e vi aspetto sul mio blog Antonio Musarra's Blog (https://www.dontesta.it).
Come installare Liferay 7 su JBOSS EAP con il supporto Oracle DatabaseAntonio Musarra
Nel corso di questa guida vedremo come installare Liferay 7 Community Edition su JBOSS EAP 6.4 con il supporto a Oracle Database. Chi di voi mi segue sul mio blog, saprà che subito dopo l’uscita della prima GA di Liferay 7 ho aggiunto il supporto per Oracle Database rimosso dalla Community Edition da Liferay.
1. Repository liferay-7-jboss-eap-home con la struttura e file di configurazione di Liferay e JBOSS EAP 6.4.0.GA -https://github.com/amusarra/liferay-7-jboss-eap-home
2. Liferay 7 Wildfly: How to add support for Oracle DB - Antonio Musarra’s Blog YouTube Channel - https://www.youtube.com/watch?v=7fojCjko7Ac
In this article I will show how to make/build/implement a Java due to access to the informations recorded on the CRM system, I will show also how to implement a simple Java application capable to use that client in order to execute some basic operations such as: login, contact creation, data retrieval. SugarCRM system (SugarCRM Inc., 2004) exposes to external systems some interface services for data access that support SOAP and REST protocols (SugarCRM Inc., 2010). SugarCRM version taken as reference here is Community Edition 6.1 (SugarCRM Inc., 2010).
During this article we will see how to make a .NET client to access the information recorded on the CRM system and use the client as the basis for the realization of a simple application .NET C# that is able to perform a series of elementary operations as: login, create a new contact and retrieve data.
The document discusses configuring an Oracle database instance on a server called "liferay-portal-db-1" for use with a Liferay portal installation. It creates a new tablespace and user for Liferay data, grants privileges to the user, and configures the Liferay database pool to connect to this Oracle database using the new user. It also shows the Oracle listener and connections being established from the Liferay front-end server.
This document provides information and configuration steps for setting up single sign-on (SSO) via SAML between SugarCRM and an identity provider. It includes details on the SAML authentication request generated by SugarCRM and the response from the identity provider. Code snippets and diagrams are included to illustrate the SSO process and configuration parameters.
Il documento illustra in modo semplice com'è stato realizzato il plugin sfruttando il framework messo a disposizione da Joomla. Sono inoltre affrontati i temi che riguardano l'integrazione con il sistema di CRM Open Source SugarCRM.
Le lettura del documento potrebbe essere fruttuosa per coloro che volessero approfondire il funzionamento dei Plugin di Joomla e l'integrazione con altri sistemi fruttando il protocollo SOAP.
Il documento illustra la procedura d’installazione e configurazione del Plugin Joomla chiamato J‐SugarCRM UserSync, per poi continuare con una sezione dedicata alla guida utente, quest’ultima
parte illustra quali sono le capacità aggiunte a Joomla dall’installazione del
Plugin.
Durante lo sviluppo e test di un plugin per Spoon, che ricordo essere l’ambiente dedicato al disegno dei processi ETL di Kettle, potrebbe essere utile avviare delle sessioni di debug utili per l’individuazione di eventuali errori (bug) rilevati. In questo breve articolo vedremo come sia possibile per un plugin Kettle, avviare una sessione di debug dal nostro ambiente di sviluppo, che ipotizziamo, essere Eclipse.
1. Antonio
Musarra's
Blog
Document Revision:1.0
The
ideal
solution
for
a
problem
Blog:
http://www.dontesta.it
LinkedIn:
http://it.linkedin.com/in/amusarra
Google+:
https://plus.google.com/+AntonioMusarra
Mail:
antonio.musarra@gmail.com
Liferay:
Esporre
Web
Services
Custom
Nel
momento
i
cui
cerchiamo
di
spingerci
oltre
a
quello
che
strumenti
di
sviluppo
ci
offrono
di
“default”,
è
quasi
certo
che
incontreremo
qualche
difficoltà
ad
andare
avanti
e
molto
spesso
la
difficoltà
è
dovuta
alla
disponibilità
di
scarsa
documentazione.
Nell’ambito
del
Service
Layers,
la
piattaforma
di
sviluppo
di
Liferay
consente
in
modo
semplice
è
veloce
di
generare
tutto
lo
strato
dei
servizi,
sia
locali
sia
remoti (Liferay Inc., 2014)
per
i
plugin
(Liferay Inc., 2014)
da
noi
creati.
Nel
corso
di
quest’articolo
vedremo
come
sia
possibile
sfruttare
il
01/09/14
1
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
Service
Builder
(Liferay Inc., 2014)
per
creare
dei
servizi
da
esporre
all’esterno
non
direttamente
collegati
all’entità
gestiste
dallo
specifico
plugin.
L’articolo
è
rivolto
a
tutti,
ma
sicuramente
a
tranne
maggior
beneficio
saranno
coloro
con
un
minimo
di
confidenza
con
l’SDK1
(Liferay Inc., 2014)
di
Liferay
e
in
particolar
modo
con
il
Service
Builder.
In
allegato
all’articolo
sarà
disponibile
l’intero
progetto
di
modo
che
possiate
analizzarlo
con
tutta
la
calma
necessaria
e
fare
i
vostri
test.
Il
progetto
sviluppato
per
quest’articolo
è
stato
realizzato
e
testato
su
di
un’installazione
Liferay
6.2
Community
Edition
e
Liferay
6.2
Enterprise
Edition.
1. Introduzione
In
genere
le
portlet
sviluppate
sono
data-‐driven
e
il
Service
Builder
è
il
nostro
migliore
“amico”
perché
fa
al
posto
nostro
tutto
il
lavoro
di:
• Generare
model,
persistenza
e
Service
Layers;
• Generare
le
interfacce
locali
e
remote;
• Generare
la
configurazione
di
Hibernate2
e
Spring3;
• Generare
i
finder
method
per
le
entità.
Per
un
attimo
ipotizziamo
l’esigenza
di
voler
esporre
(dalla
nostra
portlet)
un
servizio
verso
l’esterno,
accessibile
tramite
interfacce
di
tipo
JSON4
e
SOAP5,
che
sia
un
raggruppamento
di
servizi
esistenti.
Lo
schema
mostrato
in
Figura
1
dovrebbe
aiutare
a
capir
meglio
l’idea
espressa.
1
Un
software
development
kit
(in
acronimo
SDK,
traducibile
in
italiano
come
"pacchetto
di
sviluppo
per
applicazioni"),
in
informatica,
indica
genericamente
un
insieme
di
strumenti
per
lo
sviluppo
e
la
documentazione
di
software.
2
E’
una
piattaforma
middleware
open
source
per
lo
sviluppo
di
applicazioni
Java,
attraverso
l'appoggio
al
relativo
framework,
che
fornisce
un
servizio
di
Object-‐relational
mapping
(ORM)
ovvero
gestisce
la
persistenza
dei
dati
sul
database
attraverso
la
rappresentazione
e
il
mantenimento
su
database
relazionale
di
un
sistema
di
oggetti
Java.
3
In
informatica
Spring
è
un
framework
open
source
per
lo
sviluppo
di
applicazioni
su
piattaforma
Java.
4
JSON,
acronimo
di
JavaScript
Object
Notation,
è
un
formato
adatto
per
lo
scambio
dei
dati
in
applicazioni
client-‐server.
5
In
informatica
SOAP
(inizialmente
acronimo
di
Simple
Object
Access
Protocol)
è
un
protocollo
leggero
per
lo
scambio
di
messaggi
tra
componenti
software,
tipicamente
nella
forma
di
componentistica
software.
La
parola
object
manifesta
che
l'uso
del
protocollo
dovrebbe
effettuarsi
secondo
il
paradigma
della
programmazione
orientata
agli
oggetti.
2. Antonio
Musarra's
Blog
Document Revision:1.0
The
ideal
solution
for
a
problem
Blog:
http://www.dontesta.it
LinkedIn:
http://it.linkedin.com/in/amusarra
Google+:
https://plus.google.com/+AntonioMusarra
Mail:
antonio.musarra@gmail.com
Figura
1
Portlet
che
espone
un
servizio
custom.
Quello
che
vogliamo
ottenere
è
quindi
un
servizio
personalizzato
chiamato
Custom
Users
Service
disponibile
pubblicamente
e
che
sfrutti
i
servizi
core
del
portale.
In
questo
particolare
scenario
vogliamo
fare
in
modo
che
il
servizio
Custom
Users
Service,
esponga
un
metodo
che
ritorni
al
consumer
del
servizio,
la
lista
di
utenti
taggati
con
un
determinato
tag
(Liferay Inc., 2014).
Perché
realizzare
un
servizio
del
genere?
Alcune
delle
finalità
principali
possono
essere:
• Realizzare
un
servizio
che
implementi
un
requisito
che
non
è
possibile
soddisfare
attraverso
un
servizio
core
del
portale;
• Comporre
più
servizi
core
del
portale
per
realizzare
un
servizio
unico
che
sia
di
più
facile
utilizzo
per
il
consumer;
Nello
schema
di
Figura
2
è
rappresentato
il
servizio
Custom
Users
Service
messo
a
disposizione
dall’ipotetica
portlet
Shirus
Labs
Example
Services
01/09/14
2
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
che
poi
andremo
a
realizzare.
Public Network
Liferay System
My Custom Portlet
Service Layer
Custom User Service
Liferay Core Services
Services Client
Version 1.0
3. Antonio
Musarra's
Blog
Document Revision:1.0
The
ideal
solution
for
a
problem
Blog:
http://www.dontesta.it
LinkedIn:
http://it.linkedin.com/in/amusarra
Google+:
https://plus.google.com/+AntonioMusarra
Mail:
antonio.musarra@gmail.com
Figura
2
Dettaglio
del
servizio
Custom
Users
Service.
2. Qual
è
il
trucco?
Il
più
delle
volte
(oserei
dire
sempre)
il
Service
Builder
è
utilizzato
per
generare
il
codice
e
le
configurazioni
(Spring
e
Hibernate)
necessarie
per
le
operazioni
di
tipo
CRUD6
sull’entità
gestite
dalla
portlet,
ma
nel
nostro
caso
la
parte
Hibernate
è
da
escludere.
In
Figura
3
nella
sezione
A
è
mostrato
il
tool
del
Service
Builder
in
condizioni
“normali”,
al
contrario,
nella
sezione
B,
01/09/14
3
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
manca
la
parte
Hibernate.
Il
trucco
è
proprio
nella
sezione
B,
in
altre
parole,
nella
definizione
dell’entità
descritta
sul
file
service.xml,
occorre
specificare
esclusivamente
il
nome
dell’entità
e
la
disponibilità
del
tipo
di
servizio:
locale,
remoto
o
entrambe.
Nel
Listato
1
è
riportato
l’esempio
della
configurazione
del
Service
Builder
per
la
portlet
del
nostro
esempio.
6
La
tavola
CRUD
(Create,
Read,
Update,
Delete)
associa
utenti
e
risorse,
o
loro
aggregazioni,
di
un
sistema
informatico
indicando
i
relativi
privilegi
di
accesso.
4. Antonio
Musarra's
Blog
Document Revision:1.0
The
ideal
solution
for
a
problem
Blog:
http://www.dontesta.it
LinkedIn:
http://it.linkedin.com/in/amusarra
Google+:
https://plus.google.com/+AntonioMusarra
Mail:
antonio.musarra@gmail.com
Portlet Code
Service Builder
Spring Hibernate
Data Base
Portlet Code
Service Builder
Spring Hibernate
Version 1.0
Sezione A
Sezione B
Figura
3
Il
Service
Builder
Tool
sopra
Spring
&
Hibernate
che
genera
codice
e
configurazione.
Un’entità
rappresenta
solitamente
una
business
facade7
e
una
tabella
sulla
base
di
dati.
Se
l’entità
non
ha
nessuna
colonna
definita,
allora
l’entità
rappresenta
semplicemente
una
business
facade.
In
queste
condizioni
(così
come
mostrato
nella
configurazione
del
Listato
1)
il
Service
Builder
01/09/14
4
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
genererà
una
business
facade
POJO 8
vuota.
Le
successive
esecuzioni
del
Service
Builder
verificheranno
l’esistenza
della
business
facade,
qualora
esistesse
e
con
eventuali
nuovi
metodi,
il
Service
Builder
si
preoccuperà
di
aggiornare
anche
i
wrappers
SOAP.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 6.2.0//EN"
"http://www.liferay.com/dtd/liferay-service-builder_6_2_0.dtd">
<service-builder package-path="it.dontesta.shirus.labs.liferay.ws.example">
<author>amusarra</author>
<namespace>shirus_labs_liferay_ws_example</namespace>
<entity name="CustomUsers" local-service="true" remote-service="true">
</entity>
<exceptions>
<exception>UsersNotFound</exception>
</exceptions>
</service-builder>
Listato
1
Configurazione
del
Service
Builder
sul
file
service.xml.
Per
l’entità
CustomUsers
definita
nel
file
di
configurazione
service.xml
indichiamo
al
Service
Builder
di
generare
le
interfacce
remote
e
le
interfacce
locali,
inoltre
chiediamo
di
generare
un
tipo
di
eccezione
7
Letteralmente
façade
significa
"facciata",
ed
infatti
nella
programmazione
ad
oggetti
indica
un
oggetto
che
permette,
attraverso
un'interfaccia
più
semplice,
l'accesso
a
sottosistemi
che
espongono
interfacce
complesse
e
molto
diverse
tra
loro,
nonché
a
blocchi
di
codice
complessi.
8
Plain
Old
Java
Object
(POJO)
ovvero
un
semplice
JavaBean
costituito
dalle
proprietà
e
i
rispettivi
getters/setter
(quando
serve).
5. Antonio
Musarra's
Blog
Document Revision:1.0
The
ideal
solution
for
a
problem
Blog:
http://www.dontesta.it
LinkedIn:
http://it.linkedin.com/in/amusarra
Google+:
https://plus.google.com/+AntonioMusarra
Mail:
antonio.musarra@gmail.com
UsersNotFoundException
che
utilizzeremo
in
seguito
per
sollevare
un
eccezione
nel
caso
in
cui
la
ricerca
non
produca
nessun
risultato.
Qualora
la
vostra
curiosità
vada
oltre,
consiglio
di
consultare
il
01/09/14
5
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
DTD9
che
si
riferisce
al
Service
Builder.
Dalla
lettura
del
DTD
potete
scoprire
un
bel
po’
d’informazioni
che
potrebbero
tornare
utili.
Eseguito
il
Service
Builder,
siamo
pronti
per
l’implementazione
del
servizio
Custom
Users
Service.
3. Implementazione
del
servizio
Custom
Users
Service
Qualcuno
di
voi
saprà
certamente
che,
implementare
il
servizio
Custom
Users
Services
significa
scrivere
l’implementazione
dell’interfaccia,
locale
(Liferay
Inc., 2014)
e
remota
(LIferay Inc., 2014),
ed
esattamente:
• CustomUsersLocalService:
Interfaccia
locale
di
cui
implementare
il
metodo
getUsersCompanyByTagName;
• CustomUsersService:
Interfaccia
remota
di
cui
implementare
il
metodo
getUsersCompanyByTagName.
Servizio
Operation
&
Descrizione
Parametri
del
servizio
CustomUsersService
getUsersCompanyByTagName.
Quest’operazione
del
servizio
restituisce
sulla
base
dei
parametri
in
input
una
lista
di
utenti
del
portale
che
soddisfano
le
condizioni
di
ricerca.
Param
Type
Descrizione
companyId
Long
CompanyId
d’interesse
per
la
ricerca
degli
utenti.
tagName
String
Nome
del
tag
assegnato
agli
utenti
che
si
vuole
ricercare
(esempio:
CRM,
Imported,
etc…).
userStatus
Int
Stato
dell’utente
(esempio:
Attivo,
disattivo
etc…).
start
Int
Start
index
end
Int
End
index
Tabella
1
Descrizione
del
servizio
Custom
Users
Service
da
implementare.
Dopo
l’esecuzione
del
Service
Builder,
avremo
a
nostra
disposizione
una
serie
di
classi
e
interfacce
generate
a
supporto
del
nostro
servizio.
Il
cuore
del
servizio
è
la
classe
CustomUsersLocalServiceImpl,
all’intero
della
quale
dovrà
essere
codificata
la
logica
di
business
del
nostro
servizio.
In
Figura
4
è
mostrato
il
class
diagram
delle
classi
e
interfacce
generate
dal
Service
Builder,
utile
per
9
Il
Document
Type
Definition
(definizione
del
tipo
di
documento)
è
uno
strumento
utilizzato
dai
programmatori
il
cui
scopo
è
quello
di
definire
le
componenti
ammesse
nella
costruzione
di
un
documento
XML.
6. Antonio
Musarra's
Blog
Document Revision:1.0
The
ideal
solution
for
a
problem
Blog:
http://www.dontesta.it
LinkedIn:
http://it.linkedin.com/in/amusarra
Google+:
https://plus.google.com/+AntonioMusarra
Mail:
antonio.musarra@gmail.com
capire
le
relazioni
tra
i
vari
elementi.
Per
questioni
di
spazio
e
chiarezza,
il
diagramma
riporta
solo
la
parte
local
del
servizio.
Com’è
possibile
notare
dal
diagramma
di
Figura
4,
la
classe
CustomUsersLocalServiceImpl
01/09/14
6
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
e
l’interfaccia
CustomUsersLocalService
presentano
già
il
metodo
da
implementare,
questo
perché
il
diagramma
è
stato
generato
dopo
l’implementazione
del
metodo
e
la
successiva
esecuzione
del
Service
Builder,
inoltre
è
stato
anche
aggiunto
il
metodo
statico
alla
classe
CustomUsersLocalServiceUtil.
Figura
4
Class
diagram
interfacce
e
classi
(parte
locale)
generate
dal
Service
Builder.
Ricordiamo
che
dal
metodo
da
implementare,
desideriamo
ottenere
l’elenco
degli
utenti
che
hanno
un
determinato
tag,
apposto
per
esempio
durante
l’importazione
(Musarra, 2014)
di
un
insieme
di
utenti
provenienti
da
qualche
altro
sistema
(CRM,
ERP,
etc…).
L’implementazione
del
metodo
getUsersCompanyByTagName,
è
abbastanza
semplice,
si
traduce
in
pochissime
righe
di
codice.
Per
soddisfare
il
requisito,
ho
preferito
utilizzare
il
servizio
di
ricerca
del
SearchEngine
di
Liferay,
in
questo
modo
la
risposta
del
servizio
sarà
anche
più
performante.
La
lista
degli
utenti
che
il
metodo
restituirà
(sotto
forma
di
array)
sarà
del
tipo
com.liferay.portal.model.UserSoap,
questo
perché
vogliamo
che
il
servizio
sia
disponibile
tramite
SOAP,
quindi
dobbiamo
utilizzare
il
wrapper
SOAP
dell’entità
User
che
Liferay
ci
mette
a
disposizione,
e
inoltre
eviterà
problemi
di
serializzazione
e
deserializzazione.
Il
Listato
2
riporta
l’implementazione
del
metodo
getUsersCompanyByTagName
per
della
classe
CustomUsersLocalServiceImpl,
7. Antonio
Musarra's
Blog
Document Revision:1.0
The
ideal
solution
for
a
problem
Blog:
http://www.dontesta.it
LinkedIn:
http://it.linkedin.com/in/amusarra
Google+:
https://plus.google.com/+AntonioMusarra
Mail:
antonio.musarra@gmail.com
mentre
il
Listato
3
riporta
l’implementazione
del
metodo
della
classe
CustomUsersServiceImpl.
public com.liferay.portal.model.UserSoap[] getUsersCompanyByTagName(long companyId,
String tagName,
Integer userStatus, int start, int end) throws
PortalException,
SystemException {
SearchContext searchContext = new SearchContext();
searchContext.setCompanyId(companyId);
searchContext.setEntryClassNames(new String[] { User.class.getName() });
searchContext.setStart(start);
searchContext.setEnd(end);
searchContext.setAndSearch(true);
BooleanQuery searchQuery = BooleanQueryFactoryUtil.create(searchContext);
searchQuery.addRequiredTerm(Field.COMPANY_ID, companyId);
searchQuery.addRequiredTerm(Field.ASSET_TAG_NAMES, tagName);
searchQuery.addRequiredTerm(Field.STATUS, userStatus);
Hits hits = SearchEngineUtil.search(searchContext, searchQuery);
Tuple tuple = UsersAdminUtil.getUsers(hits);
if (hits.getLength() == 0) {
throw new UsersNotFoundException("No data available for the search
parameters you set.");
}
List<User> results = (List<User>) tuple.getObject(0);
UserSoap[] userSoap = new UserSoap[results.size()];
for (int i = 0; i < userSoap.length; i++) {
userSoap[i] = UserSoap.toSoapModel(results.get(i));
}
return userSoap;
}
Listato
2
Implementazione
del
metodo
getUsersCompanyByTagName
per
l’interfaccia
locale.
public UserSoap[] getUsersCompanyByTagName(long companyId, String tagName,
Integer userStatus, int start, int end) throws
PortalException,
SystemException {
return CustomUsersLocalServiceUtil.getUsersCompanyByTagName(companyId,
tagName, userStatus, start, end);
}
Listato
3
Implementazione
del
metodo
getUsersCompanyByTagName
per
l’interfaccia
remota.
01/09/14
7
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
8. Antonio
Musarra's
Blog
Document Revision:1.0
The
ideal
solution
for
a
problem
Blog:
http://www.dontesta.it
LinkedIn:
http://it.linkedin.com/in/amusarra
Google+:
https://plus.google.com/+AntonioMusarra
Mail:
antonio.musarra@gmail.com
4. Test
del
servizio
Custom
Users
Service
Adesso
che
il
servizio
è
bello
che
confezionato
e
installato
sul
portale
di
Liferay,
è
possibile
accedervi
da
remoto
tramite
l’interfaccia
SOAP
e
JSON.
01/09/14
8
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
Gli
end
point
del
servizio
esposto
dalla
portlet
sono:
• SOAP
o http://[host]:[port]/
api/axis/Plugin_shirus_labs_liferay_ws_example_CustomUsersSer
vice
• JSON
o http://[host]:[port]/api/jsonws/ShirusLabsExampleServices-‐
portlet.customusers/get-‐users-‐company-‐by-‐tag-‐name
Se
volessimo
eseguire
un
test
veloce
del
servizio
SOAP,
è
più
che
sufficiente
prendere
nota
dell’end
point
e
utilizzare
il
tool
soapUI.
In
Figura
5
è
mostrato
un
test
del
servizio
eseguito
proprio
con
soapUI.
Figura
5
Test
del
servizio
tramite
il
tool
soapUI.
Tramite
ant
è
possibile
senza
alcuno
sforzo
generare
un
client
Java
da
poter
utilizzare
all’interno
della
vostra
applicazione
da
dover
integrare.
Il
task
ant
che
assolve
questo
compito
si
chiama
build-‐client.
L’esecuzione
del
task
genererà
il
jar
(che
nel
nostro
caso
prender
il
nome
di
ShirusLabsExampleServices-‐portlet-‐
9. Antonio
Musarra's
Blog
Document Revision:1.0
The
ideal
solution
for
a
problem
Blog:
http://www.dontesta.it
LinkedIn:
http://it.linkedin.com/in/amusarra
Google+:
https://plus.google.com/+AntonioMusarra
Mail:
antonio.musarra@gmail.com
client.jar)
che
potrete
utilizzare
per
connettervi
alla
servizio
dalla
vostra
applicazione.
Il
jar
dopo
il
build
sarà
posizione
dentro
la
directory
01/09/14
9
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
docroot/WEB-‐
INF/client
del
progetto.
Nel
Listato
4
le
poche
righe
di
codice
mostrano
come
sia
semplice
e
immediato
accedere
al
servizio.
public class TestGetUsersCompanyByTagNameService {
static final String LIFERAY_USER_NAME = (System.getProperty("username") !=
null) ? System
.getProperty("username") : "test@liferay.com";
static final String LIFERAY_USER_PASSWORD =
(System.getProperty("password") != null) ? System
.getProperty("username") : "test";
static final String USER_SERVICE = "Portal_UserService";
/**
*
*/
public TestGetUsersCompanyByTagNameService() {
}
public static void main(String[] args) throws Exception, SystemException {
CustomUsersServiceSoapServiceLocator locator = new
CustomUsersServiceSoapServiceLocator();
CustomUsersServiceSoap customUsersService = locator
.getPlugin_shirus_labs_liferay_ws_example_CustomUsersService();
((Plugin_shirus_labs_liferay_ws_example_CustomUsersServiceSoapBindingStub)
customUsersService)
.setUsername(LIFERAY_USER_NAME);
((Plugin_shirus_labs_liferay_ws_example_CustomUsersServiceSoapBindingStub)
customUsersService)
.setPassword(LIFERAY_USER_PASSWORD);
UserSoap[] listUsers = customUsersService.getUsersCompanyByTagName(
10157l, "crm", 0, 0, 10);
for (UserSoap userSoap : listUsers) {
System.out.println("User ScreeName : " +
userSoap.getScreenName());
}
}
}
Listato
4
Esempio
di
accesso
al
servizio
SOAP
tramite
il
client
generato
dall’SDK.
Per
quanto
riguarda
il
servizio
JSON,
è
possibile
eseguire
un
semplice
test
tramite
il
tool
curl
o
direttamente
via
browser
attraverso
l’opportuna
URL
in
stile
RESTful.
Il
Listato
5
mostra
l’esempio
di
accesso
al
servizio
JSON
tramite
curl.
10. Antonio
Musarra's
Blog
Document Revision:1.0
The
ideal
solution
for
a
problem
Blog:
http://www.dontesta.it
LinkedIn:
http://it.linkedin.com/in/amusarra
Google+:
https://plus.google.com/+AntonioMusarra
Mail:
antonio.musarra@gmail.com
curl http://localhost:8080/api/jsonws/ShirusLabsExampleServices-portlet.
customusers/get-users-company-by-tag-name
-u test@liferay.com:test
-d companyId=10157
-d tagName='crm'
-d userStatus=0
-d start=0
-d end=3
Listato
5
Test
del
servizio
JSON
tramite
curl.
Per
ottenere
lo
stesso
risultato
del
Listato
5
via
URL,
è
sufficiente
specificare
sul
browser
la
seguente
URL:
http://localhost:8080/api/jsonws/ShirusLabsExampleServices-‐
portlet.customusers/get-‐users-‐company-‐by-‐tag-‐name/company-‐id/10157/tag-‐
name/crm/user-‐status/0/start/0/end/3
per
ottenere
un
risultato
simile
a
quello
mostrato
nel
Listato
6.
01/09/14
10
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
[{
"agreedToTermsOfUse": false,
"comments": "",
"companyId": 10157,
"contactId": 12102,
"createDate": 1392734987656,
"defaultUser": false,
"digest": "",
"emailAddress": "antonio.musarra@gmail.com",
"emailAddressVerified": false,
"facebookId": 0,
"failedLoginAttempts": 1,
"firstName": "Antonio",
"graceLoginCount": 0,
"greeting": "Welcome Antonio Musarra!",
"jobTitle": "IT Architect",
"languageId": "en_US",
"lastFailedLoginDate": 1393625990890,
"lastLoginDate": null,
"lastLoginIP": "",
"lastName": "Musarra",
"ldapServerId": -1,
"lockout": false,
"lockoutDate": null,
"loginDate": null,
"loginIP": "",
"middleName": "",
"modifiedDate": 1392735025523,
"openId": "",
"password": "AAAAoAAB9ABtc0QtttzLGtK931wwN957psU8maq0Jxu1Gais",
"passwordEncrypted": true,
"passwordModifiedDate": 1392734988948,
"passwordReset": true,
"portraitId": 0,
"primaryKey": 12101,
"reminderQueryAnswer": "",
"reminderQueryQuestion": "",
"screenName": "amusarra",
"status": 0,
"timeZoneId": "UTC",
"userId": 12101,
"uuid": "baf84339-315b-426c-838b-e58dc806bec8"
}]
Listato
6
Esempio
di
risposta
del
servizio
JSON.
11. Antonio
Musarra's
Blog
Document Revision:1.0
The
ideal
solution
for
a
problem
Blog:
http://www.dontesta.it
LinkedIn:
http://it.linkedin.com/in/amusarra
Google+:
https://plus.google.com/+AntonioMusarra
Mail:
antonio.musarra@gmail.com
5. Conclusioni
Abbiamo
fatto
un
breve
excursus
su
come
sia
possibile
e
semplice
realizzare
dei
servizi
custom
da
esporre
verso
l’esterno
che
utilizzano
servizi
del
portale
già
preesistenti.
In
questo
modo
è
fattibile
realizzare
in
poco
tempo
dei
servizi
anche
complessi
come
composizione
di
altri
servizi
e
rendere
in
questo
modo
l’interfaccia
verso
il
sistema
client
molto
più
semplice
da
utilizzare
e
snella.
Un
piccolo
favore
Per
quanta
passione
e
soddisfazione
possa
portare
a
scrivere
contenuti
di
questo
tipo,
ciò
comporta
anche
un
grande
dispendio
di
tempo
e
risorse.
Se
i
contenuti
gratuiti
offerti
in
quest’articolo
sono
stati
utili
per
te,
potresti
restituirmi
il
favore
condividendo
l’articolo
sui
canali
di
social
network,
in
modo
da
rendere
utile
anche
per
gli
altri
ciò
che
ho
scritto.
Clicca
sulle
immagini
per
condividere:
Vi
aspetto
su
Antonio
Musarra’s
Blog
-‐
The
ideal
solution
for
a
problem
(http://www.dontesta.it/blog/).
L’articolo
è
pubblicato
sul
blog
CoseNonJaviste
all’indirizzo
http://goo.gl/WyiVV2
01/09/14
11
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike
12. Antonio
Musarra's
Blog
Document Revision:1.0
The
ideal
solution
for
a
problem
Blog:
http://www.dontesta.it
LinkedIn:
http://it.linkedin.com/in/amusarra
Google+:
https://plus.google.com/+AntonioMusarra
Mail:
antonio.musarra@gmail.com
Bibliography
Liferay
Inc.
(2014).
Generating
Your
Service
Layer.
Tratto
da
Liferay
Portal
6.2
Developer's
Guide:
http://www.liferay.com/it/documentation/liferay-‐
portal/6.2/development/-‐/ai/generating-‐your-‐service-‐layer-‐liferay-‐portal-‐6-‐2-‐
dev-‐guide-‐04-‐en
Liferay
Inc.
(2014).
Plugin
Management.
Tratto
da
Using
Liferay
Portal
6.2:
http://www.liferay.com/it/documentation/liferay-‐portal/6.2/user-‐guide/-‐
/ai/plugin-‐management-‐liferay-‐portal-‐6-‐2-‐user-‐guide-‐14-‐en
Liferay
Inc.
(2014).
Tagging
and
Categorizing
Content.
Tratto
da
Using
Liferay
Portal
6.2:
http://www.liferay.com/it/documentation/liferay-‐portal/6.2/user-‐
guide/-‐/ai/tagging-‐and-‐categorizing-‐content-‐liferay-‐portal-‐6-‐2-‐user-‐guide-‐06-‐
en
Liferay
Inc.
(2014).
What
is
Service
Builder?
Tratto
da
Liferay
Portal
6.2
Developer's
Guide:
http://www.liferay.com/it/documentation/liferay-‐
portal/6.2/development/-‐/ai/what-‐is-‐service-‐builder-‐liferay-‐portal-‐6-‐2-‐dev-‐
guide-‐04-‐en
Liferay
Inc.
(2014).
Working
with
Liferay’s
Developer
Tools.
Tratto
da
Liferay
Portal
6.2
Developer's
Guide:
http://www.liferay.com/it/documentation/liferay-‐
portal/6.2/development/-‐/ai/working-‐with-‐liferays-‐developer-‐tools-‐liferay-‐
portal-‐6-‐2-‐dev-‐guide-‐02-‐en
Liferay
Inc.
(2014).
Writing
Local
Service
Classes.
Tratto
da
Liferay
Portal
6.2
Developer's
Guide:
http://www.liferay.com/it/documentation/liferay-‐
portal/6.2/development/-‐/ai/write-‐local-‐service-‐classes-‐liferay-‐portal-‐6-‐2-‐dev-‐
guide-‐04-‐en
LIferay
Inc.
(2014).
Writing
Remote
Service
Classes.
Tratto
da
Liferay
Portal
6.2
Developer's
Guide:
http://www.liferay.com/it/documentation/liferay-‐
portal/6.2/development/-‐/ai/write-‐remote-‐service-‐classes-‐liferay-‐portal-‐6-‐2-‐
dev-‐guide-‐04-‐en
Musarra,
A.
(2014,
Jan
01).
Liferay
Web
Services
-‐
Come
importare
utenti
da
un
foglio
Excel.
Tratto
da
LinkedIn
Corporation:
http://www.slideshare.net/amusarra/liferay-‐web-‐services-‐come-‐importare-‐
utenti-‐da-‐un-‐foglio-‐excel
01/09/14
12
This
document
is
issued
with
license
Creative
Commons
Attribution-‐NonCommercial-‐ShareAlike