Introduzione
Il Web 2.0 ci ha abituato a delle applicazioni web con un livello di interazione spiccato. Si parla ormai da tempo di Rich Internet Application, applicazioni costruite con tecnologie tali da superare tutti i limiti delle tradizionali applicazioni HTML, rendendo le applicazioni web sempre più simili (al limite indistinguibili) alle applicazioni desktop. Il risultato finale è che le Rich Internet Application (RIA) offrono all'utente un'esperienza avanzata e più accattivante che garantisce maggiore soddisfazione e un aumento della produttività.
Quando parliamo di Rich Internet Application ci riferiamo evidentemente al front-end di un'applicazione distribuita, che possiede tutte le caratteristiche grafiche delle applicazioni desktop tranne per il fatto che i dati risiedono su un server raggiungibile attraverso una rete (ad esempio Internet).
Java EE è una delle piattaforme più diffuse e complete per creare applicazioni di tipo enterprise; Adobe Flex, dal suo canto, è leader nel mondo delle RIA (Rich Internet Application). Puntare sull'integrazione delle due soluzioni significa puntare nello sviluppo di robuste applicazioni enterprise in grado di fornire delle interfacce accattivanti agli utenti. Inoltre, è possibile salvaguardare gli investimenti già fatti in soluzioni Java e dotare tali applicazioni preesistenti di interfacce web di nuova generazione.
L'integrazione è quindi un elemento chiave di ogni RIA, e nel presente articolo ci occuperemo proprio di questo: integrare un RIA in Flex con applicativi lato server Java-based.
Mokabyte si è già interessata in passato a Flex 2 e ai Flex Data Services, negli articoli di Marco Casario ([1], [2]): quindi faremo tesoro di quanto già detto e ci concentreremo sulle novità introdotte in Flex 3 e sull'evoluzione open source dei Flex Data Service, appunto BlazeDS.
Una veloce panoramica su Adobe Flex
Adobe Flex è un framework open source che permette di creare applicazioni RIA che girano su Adobe Flash Player [1].
Va messo bene in chiaro che, a differenza di Adobe Flash, con cui condivide il player, Flex non è quindi uno strumento di authoring: non ci sono timeline di animazione nel mondo Flex. Flex ha una struttura interamente a componenti (SDK), come DataGrid, Panel, Tree etc..., guidati da eventi e tenuti insieme tramite un robusto data binding. Inoltre ogni componente può essere personalizzato fin nei minimi dettagli, oltre a poter essere esteso per crearne di nuovi.
La programmazione in Flex consta di codice MXML e codice ActionScript 3 (AS3). AS3 è un linguaggio Object Oriented, simile a Java, mentre MXML è un linguaggio XML-based di tipo dichiarativo che viene successivamente tradotto in AS3.
Un'applicazione Flex, dopo la compilazione, può dare origine ad un file SWF da eseguire in un Flash Player, o un file SWC che può essere utilizzato all'interno di altri file .swf. I file .swf vengono inseriti dentro un application server (o web server) e, quando richiesti dagli utenti (all'interno delle pagine web visitate), vengono scaricati localmente nel PC dell'utente e eseguite nel flash player del browser.
Nonostante lo sviluppo in Flex e in Flash sia totalmente diverso, è importante capire che in entrambi i casi il risultato finale è la creazione di file SWF, il formato compilato della piattaforma Flash.
Flex non è un singolo prodotto, ma una combinazione di differenti tecnologie:
Linguaggi: ActionScript 3 e MXML
Framework di componenti: Flex SDK L'SDK Flex (conosciuto anche come Flex framework) è un set di user interface components, come liste, pulsanti, grafici che vengono usati per costruire le applicazioni Flex. L'SDK Flex (con l'eccezione del package dei grafici) è open source.
Integrated Development Environment (IDE): Flex Builder Con Flex Builder si può editare il codice, compilare le applicazioni, effettuare il debug del codice, e analizzare la performance. Flex Builder è un software di proprietà Adobe.
Cross-browser runtime: Flash Player Le applicazioni Flex girano normalmente in un web browser con il plugin Flash Player. È possibile creare delle applicazioni Flex di tipo standalone usando l'Adobe Integrated Runtime (AIR).
La prossima versione Flex 4, con nome in codice Gumbo, è attualmente alla versione beta 2 e promette interessanti novità oltre a puntare sul potenziamento del ruolo del framework Flex, sia per gli sviluppatori di applicazioni Flex, che per i designer che usano Adobe Flash Catalisi per creare i design. Illustreremo tali importanti novità in un futuro articolo.
Messaging Service
BlazeDS in definitiva permette due tipi di interazioni: RPC (Remote Procedure Call) e Messaging Service. Le RPC permettono ai client di effettuare delle chiamate asincrone di servizi remoti che effettuano determinate operazioni sul server e restituiscono i risultati direttamente al client. I componenti RPC lato client, messi a disposizione nell'SDK, forniscono servizi HTTP (componente HTTPService), web service (componenti WebService) e remote object service (componenti RemoteObject). Senza l'ausilio di BlazeDS, usando solamente l'SDK, è possibile effettuare delle chiamate HTTP o di web service, ma non è possibile invocare direttamente metodi di oggetti Java [2]. Una delle caratteristiche più interessanti è data proprio dal fatto che il componente RemoteObject (lato client) permette di accedere a oggetti Java remoti senza la necessità di configurarli come web service.
Il Messaging Service permette alle applicazioni client di comunicare fra di loro in maniera asincrona scambiando messaggi attraverso il server. I client che intendono inviare un messaggio sono chiamati producer e utilizzano il componente Producer, mentre i client che sfruttano un messaggio sono detti comsumer e utilizzano il componente Consumer che prevede la registrazione di una destinazione sul server. Il Messaging Service supporta anche il bridging verso server JMS attraverso un adattore (JMSAdapter).
Destinations, Channels, Endpoints Uno dei principali vantaggi di BlazeDS è l'uso dell' AMF (Action Message Format) per la trasmissione dei dati tra Flex e Java. AMF è un protocollo binario supportato nativamente dal flash player e quindi il suo uso rende la trasmissione veloce ed efficiente. A rendere più agevole l'uso del protocollo è la definizione di livelli di astrazione superiori che permettono di focalizzare l'attenzione sulla business logic trascurando i dettagli della comunicazione. Destinations, channels, endpoints sono appunto delle astrazioni di livello superiore e rappresentano concetti chiave del framework Flex. Le entità server side sono mappati a nomi logici (destination) e vengono invocati usando questi nomi. Quando un client interagisce con un servizio server-side tramite una destination, usa un canale di comunicazione (channel) per le comunicazioni da e verso il server. Un channel è l'astrazione di un canale di comunicazione che incapsula formato dei messaggi, protocollo di rete, gestisce l'ordine di consegna dei messaggi. Avremo ad esempio un AMF channel per gestire l'encoding e la comunicazione in AMF (proprietario di Adobe) e un HTTP channel per gestire l'encoding e la comunicazione in HTTP. Dal lato server un channel termina in un endpoint Java-based che ha il compito di effettuare l'unmarshalling dei messaggi e consegnarli al servizio opportuno.
Quindi un channel è un oggetto lato client che rappresenta la connessione tra il componente Flex e il server BlazeDS, e terminano dal lato server in un oggetto endpoint. La configurazione di un canale e del relativo endpoint avviene tramite file di configurazione.
Installare BlazeDS In questo paragrafo illustrerò i passi da eseguire per installare BlazeDS su JBoss. Abbiamo già detto che BlazeDS non è che un'applicazione web e quindi l'installazione equivale al deploying di una qualunque applicazione web in formato WAR. Partiamo innanzitutto con il download dell'ultima versione di BlazeDS dall'indirizzo
HYPERLINK "http://opensource.adobe.com/wiki/display/blazeds/BlazeDS" http://opensource.adobe.com/wiki/display/blazeds/BlazeDS
Qui è possibile scegliere se scaricare solo i binari, la versione con i sorgenti, oppure la versione Turnkey, contenente anche un web server Tomcat all'interno del quale il blazeDS è già deployato assieme a diverse applicazioni di esempio. Per i nostri scopi effettuiamo il download dei binari, disponibili come unico file ZIP. Dopo averlo scompattato troviamo all'interno il file "blazeds.war" che contiene tutto ciò che ci serve. In aggiunta ci sono pure altri due file ("blazeds-sample.war" e "blazeds-console.war") contenenti alcuni esempi (utili soprattutto per verificare che il BlazeDS funzioni correttamente), ed una console per monitorare il deployment di BlazeDS. In JBoss, il deploying di un'applicazione consiste nel copiare il file war nella cartella deploy del server avviato (in genere server -> default -> deploy). Copiamo allora il file "blazeds.war" e il file "blazeds-samples.war" e apriamo il browser per lanciare gli esempi ( HYPERLINK "http://localhost:8080/blazeds-sample" http://localhost:8080/blazeds-sample) e verificare che il server blazeds funzioni correttamente.
Configurare un servizio Con BlazeDS c'è più da configurare che da scrivere codice. Per configurare un servizio occorre configurare una servlet, la servlet message broker, che si occupa di gestire tutte le comunicazioni e le invocazioni dei servizi. Scompattiamo il file "blazeds.war"(che è un'applicazione web) e nel file "web.xml" configuriamo questa servlet (in realtà è già configurata), settando il file di configurazione che la servlet deve usare:
<servlet> <servlet-name>MessageBrokerServlet</servlet-name> <display-name>MessageBrokerServlet</display-name> <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class> <init-param> <param-name>services.configuration.file</param-name> <param-value>/WEB-INF/flex/services-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
Tutte le configurazioni vengono fatte in questo file, chiamato normalmente "services-config.xml". Normalmente, poiché i servizi offerti sono di 4 tipi (RPC, Proxy Server, Messaging, e Manage Data), Adobe ha pensato di suddividere il file di configurazione in 4 pezzi differenti, uno per funzionalità fornita. Ognuno di questi pezzi viene poi incluso per riferimento nel file di configurazione "services-config.xml". Il nome di questi file ricorda la funzionalità a cui sono adibiti:
remoting-config.xml proxy-config.xml messaging-config.xml data-management-config.xml (BlazeDS non fornisce questo tipo di servizi, LCDS sì)
Nel file "services-config.xml" vengono inclusi i primi 3 file
<?xml version="1.0" encoding="UTF-8"?> <services-config> <services> <service-include file-path="remoting-config.xml" /> <service-include file-path="proxy-config.xml" /> <service-include file-path="messaging-config.xml" /> </services> ...
Tutti gli aspetti comuni (logging, security, channel) vengono invece configurati nel file services-"config.xml". Nel caso in cui si voglia estendere un'applicazione Java EE già esistente, bisogna modificare il file "web.xml" di tale applicazione, aggiungere i file di configurazione sopra citati e lineare le librerie presenti nella cartella lib del blazeds.war.
Conclusioni In questo primo articolo abbiamo fatto una breve panoramica su Flex 3 e su BlazeDS, un componente lato server che semplifica la comunicazione tra applicativi Flex e Java. Nei prossimi articoli vedremo esempi pratici su come installare e configurare il BlazeDS e come scrivere una semplice applicazione RIA in Flex in grado di sfruttare dati frutto di elaborazioni lato server.
Riferimenti
- [1] Marco Casario, "Flex 2 e Java per sviluppare Rich Internet Application", MokaByte 117, aprile 2007
HYPERLINK "http://www2.mokabyte.it/cms/section.run?name=mb117" http://www2.mokabyte.it/cms/section.run?name=mb117
- [2] Marco Casario, "Flex 2 e Java per sviluppare Rich Internet Application", MokaByte 119, giugno 2007
HYPERLINK "http://www2.mokabyte.it/cms/section.run?name=mb119" http://www2.mokabyte.it/cms/section.run?name=mb119
- [3] Flex 3 SDK release Notes
HYPERLINK "http://www.adobe.com/support/documentation/en/flex/3/releasenotesflex3sdk.html" http://www.adobe.com/support/documentation/en/flex/3/releasenotesflex3sdk.html
- [4] Flex Builder release Notes
HYPERLINK "http://www.adobe.com/support/documentation/en/flex/3/releasenotesflex3fb.html" http://www.adobe.com/support/documentation/en/flex/3/releasenotesflex3fb.html
- [5] BlazeDS development guide
HYPERLINK "http://livedocs.adobe.com/blazeds/1/blazedsdevguide/" http://livedocs.adobe.com/blazeds/1/blazedsdevguide/
