Java EE e Flex, parte 1: una combinazione convincente

Adobe Flex sta diventando una scelta popolare per la generazione del lato client delle applicazioni Java aziendali. In questo primo di due articoli, Dustin Marx dimostra come Flex può aiutarti a fornire interfacce utente altamente interattive che accedono alla logica aziendale dell'applicazione Java EE. Ottieni un'introduzione pratica al perfezionamento di un semplice client Flex, quindi abilitalo a comunicare con il tuo server Java EE. Livello: principiante

Flex 3 ti offre un'altra scelta per la creazione di interfacce utente basate su browser per le tue applicazioni Java EE. Se non hai ancora scoperto quanto sia semplice aggiungere rich client alle applicazioni Java aziendali con Flex, questo articolo potrebbe fungere da punto di partenza. Scoprirete quali vantaggi offre Flex, come creare layout di applicazioni utilizzando la grammatica XML di Flex e come far funzionare il vostro client Flex con un'applicazione Java EE.

Gli sviluppatori Java che adottano Flex

Sappiamo che alcuni sviluppatori Java sono resistenti a Flex come tecnologia front-end per Java EE, ma ci sono validi motivi per dare a Flex una possibilità. L'autore Dustin Marx discute i fattori che guidano l'adozione di Flex nella comunità Java in una barra laterale di questo articolo pratico.

Prima di chiederti di installare Flex e iniziare a mettere insieme un'applicazione di esempio, consideriamo i vantaggi dell'utilizzo di Flex come tecnologia lato client. Flex offre vantaggi specifici per gli sviluppatori Java e alcuni più generali. Vedremo entrambi.

Perché scegliere Flex?

Adottare una nuova tecnologia significa abbracciare una curva di apprendimento, che può richiedere un po 'di convincimento. Ecco alcuni vantaggi generali dell'utilizzo di Flex:

  • È possibile scrivere il codice Flex una volta ed eseguirlo in qualsiasi browser Web per il quale esiste un plug-in Flash Player. Non è richiesto alcun codice di rilevamento del browser o di rilevamento di oggetti tipico delle applicazioni JavaScript o Ajax.
  • Il runtime di destinazione (Flash Player 9 o versioni successive) è installato su oltre il 95% dei browser Web in tutto il mondo.
  • Flex si basa su standard. Il suo linguaggio di scripting (ActionScript 3.0) ha radici in ECMAScript (la stessa specifica implementata da JavaScript) e il suo linguaggio di layout è una grammatica XML specifica chiamata MXML. La familiarità con gli standard sottostanti può aiutarti a imparare Flex con relativa facilità.
  • Flex ha un meccanismo piacevolmente semplice per associare la proprietà di un oggetto in un'applicazione Flex alla proprietà di un altro oggetto in Flex. Questa caratteristica avvincente viene comunemente chiamata associazione di proprietà . (JSR 295: Beans Binding ha lo scopo di aggiungere questa funzionalità al linguaggio Java, ma non sarà inclusa in Java SE 7.)
  • È possibile associare il front-end basato su Flex a qualsiasi tecnologia di back-end utilizzando tecniche che promuovono l'accoppiamento libero. Flex fornisce il supporto integrato per la comunicazione con i back-end tramite i tradizionali servizi Web HTTP e SOAP.
  • Flex fornisce una ricca serie di componenti, effetti Flash (inclusi animazione, video e audio) e funzioni di accessibilità che semplificano l'aggiunta di ricchezza ed esperienze estremamente fluide a un'applicazione Web.

Flex per sviluppatori Java

I vantaggi generali potrebbero essere sufficienti per attirarti a Flex, ma ce ne sono altri che sono principalmente o interamente rivolti agli sviluppatori Java.

Uno di questi vantaggi è la sorprendente somiglianza tra Java e ActionScript 3.0 nelle funzionalità, nei concetti e nella sintassi del linguaggio. I linguaggi utilizzano istruzioni condizionali simili, sintassi a ciclo continuo e persino convenzioni di codifica. (È discutibile che ActionScript sia più simile a Java che a JavaFX Script). Lo strumento di generazione della documentazione ASDoc simile a Javadoc di Flex utilizza la stessa sintassi dei commenti che usi in Java per generare la documentazione. La struttura del pacchetto di ActionScript è correlata alla struttura delle directory esattamente nello stesso modo in cui Java si rivolge a pacchetti e directory.

ActionScript 3 fornisce anche funzionalità orientate agli oggetti basate su classi (come classi in senso Java, ereditarietà e interfacce) e tipizzazione statica. Queste aggiunte a ciò a cui la maggior parte di noi è abituata in JavaScript facilitano l'apprendimento e l'utilizzo di ActionScript. (ActionScript rende ancora disponibili la digitazione dinamica e l'ereditarietà basata su prototipi per le situazioni in cui si desidera o si necessitano quelle funzionalità di JavaScript tradizionale.)

La capacità di Flex di comunicare con un back-end Java EE utilizzando servizi Web basati su HTTP o SOAP è molto utile, ma non sei limitato a questi approcci di comunicazione. Blaze DS, un prodotto separato e open source di Adobe, offre una flessibilità ancora maggiore per la comunicazione tra un front-end Flex e un back-end Java EE. BlazeDS ti consente di utilizzare JMS per la comunicazione e ti consente di utilizzare il remoting di oggetti con Java. BlazeDS aggiunge anche potenziali vantaggi in termini di prestazioni perché utilizza il formato binario AMF3 per una comunicazione più rapida rispetto a quella normalmente sperimentata con XML.

Un prodotto open source di terze parti chiamato GraniteDS offre ancora più scelte per l'applicazione di un front-end basato su Flex a un'applicazione Java EE. GraniteDS offre supporto per il formato binario AMF3 e anche alcune funzionalità non disponibili con BlazeDS. Ad esempio, GraniteDS offre strumenti e framework di servizi per integrare più facilmente Flex con back-end basati su EJB 3, Spring Framework, Guice o Seam.

Finora parlando di Flex, ho usato ripetutamente le parole semplice e facile . Ma non credermi sulla parola. Il modo migliore per capire quanto siano semplici e facili le basi di Flex è provarle tu stesso. Nelle sezioni successive si implementerà un'applicazione di esempio, si effettuerà il refactoring per aggiungere funzionalità e ridurre il codice boilerplate, quindi si stabilirà la comunicazione tra il nuovo client basato su Flex e un servlet Java.

Acquisizione e installazione di Flex

Gli esempi di questo articolo utilizzano Flex 3.2 SDK. Se desideri creare ed eseguire gli esempi, scarica Flex SDK (incluso il compilatore e il debugger della riga di comando). Un singolo file ZIP contiene Flex SDK per più piattaforme.

Decomprimere il file in una posizione ovvia, come C:\flex_sdk_3_2. Per comodità, aggiungi la posizione della bindirectory Flex SDK nel percorso in modo che gli strumenti della riga di comando possano essere eseguiti da qualsiasi directory. Mi piace creare una FLEX_HOMEvariabile di ambiente che punti alla posizione di Flex SDK e quindi aggiungere $FLEX_HOME/bino %FLEX_HOME%\binal file PATH. È possibile verificare una corretta installazione di Flex eseguendo il comando mxmlc -version, come mostrato nella Figura 1.

Sebbene non sia necessario creare ed eseguire gli esempi, potresti essere interessato a scaricare FlexBuilder 3, disponibile gratuitamente per un periodo di prova. FlexBuilder consente di utilizzare qualsiasi editor di testo (come JEdit o vim) o Java IDE (come NetBeans o Eclipse) per scrivere e gestire file MXML e ActionScript. Aptana Studio e Spket IDE includono un supporto specifico per la modifica dei file relativi a Flex.

MXML: layout flessibile con XML

Flex utilizza MXML per definire il layout di un'applicazione Flex. I file di layout Flex sono in genere denominati con .mxmlun'estensione. Il codice MXML deve essere XML ben formato e utilizzare spazi dei nomi XML. L'esempio nel Listato 1 mostra un'applicazione Flex semplice ma completamente funzionale, scritta interamente con MXML, che mostra un elenco di articoli JavaWorld selezionati.

Listato 1. Esempio di MXML statico

Poiché questo esempio è statico, non mostra molti dei vantaggi di Flex e Flash. Tuttavia, serve come una buona introduzione a MXML.

Tutto il codice nel listato 1 è XML ben formato. La maggior parte delle linee XML in Listato 1 sono collegate alle stesse linee di codice (ripetuti GridRowelementi con nidificata GridIteme Labelelementi). Sono usati per definire una griglia di visualizzazione statica con il Gridcomponente e i suoi GridRowe GridItemsottoelementi. L'uso di , e organizza e presenta i dati in modo simile a come gli elementi della tabella HTML

, , e
, rispettivamente, sono spesso usati.

Questo primo esempio MXML mostra anche il tag radice utilizzato in tutte le applicazioni MXML. Questo tag include una larghezza e un'altezza esplicite per l'applicazione Flex. Il mxprefisso è associato allo spazio dei nomi Flex XML come parte di questo elemento radice.

Utilizzerai il compilatore della riga di comando Flex,, mxmlcper compilare gli esempi di questo articolo. I valori predefiniti di Flex (definiti nel flex-config.xmlfile) sono sufficienti per le esigenze degli esempi, rendendo mxmlcfacile la compilazione . Supponendo che il primo elenco MXML sia salvato in un file denominato Example1.mxml, lo compili con questo comando:

mxmlc Example1.mxml

In base alle impostazioni predefinite, questo file MXML viene compilato in un file SWF, chiamato Example1.swf, che si trova nella stessa directory del file MXML da cui è stato generato. È possibile eseguire il file SWF aprendolo in un browser Web o semplicemente immettendo l'intero nome del file nella riga di comando. Il file SWF sottoposto a rendering ha un aspetto simile alla Figura 2.