SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
Spring & Flex

Marcello Teodori
marcello.teodori@jugmilano.it

Java User Group Milano
http://www.jugmilano.it

Spring Meeting Settembre 2009 - Cagliari
Di cosa parleremo?
●   Introduzione a RIA
●   Flex
●   BlazeDS
●   Spring BlazeDS Integration
●   Spring ActionScript
●   Red5




                           Spring Meeting Settembre 2009   2
Due parole sullo speaker

●   Coordinatore del JUG Milano
●   Moderatore SpringFramework-IT
●   Moderatore Gruppo Italiano Utenti Groovy
●   Socio e CTO in ExcogitaNet
●   più twitterer: http://twitter.com/magomarcelo
    che blogger: http://magomarcelo.blogspot.com
●   Prima presentazione su RIA a Java Conference '05
●   Speaker ad All4Web, evento RIA cross-community




                               Spring Meeting Settembre 2009   3
Definizione di Rich Internet Application

       "web applications have extended the reach of enterprises to
  customers, offering anywhere and anytime access. However, this has
       been at the expense of the overall user-experience, which is
              diminished by delivery through the web browser"
                     Steven Webster e Alistair McLeod,
              autori del libro Flex Integration with J2EE, 2005
          http://www.theserverside.com/articles/article.tss?l=Flex
         → un nuovo tipo di web application che ne superi i limiti?
  Caratteristiche:
   ● web deployment


   ● logica applicativa suddivisa fra client e server


   ● interazione immediata senza percezione di un roundtrip sul server


   ● accesso a contenuti rich: audio/video




                                       Spring Meeting Settembre 2009     4
Architettura di Riferimento




               Spring Meeting Settembre 2009   5
Client Runtime

La scelta del runtime:
● JVM/JavaFX
  Il ritorno delle Applet in una veste più adatta al mondo RIA.
  Estensione sul desktop tramite Java WebStart.
● AJAX
  Magia tramite JavaScript e XMLHttpRequest. Estensione sul
  desktop tramite soluzioni browser-embedded come Prism.
● Flash/Flex
  Browser plugin per animazioni vettoriali, via via arrichitosi
  nelle versioni recenti di funzionalità applicative.
  Estensione sul Desktop tramite il runtime AIR.
● Silverlight
  Browser plugin che implementa una versione ridotta del runtime
  di .NET con funzioni GUI e media avanzate.

                                   Spring Meeting Settembre 2009   6
Backend

Qual è il backend più adatto per le RIA?

Va bene qualsiasi soluzione di esportazione remota su
internet di servizi, purché esponga le proprie funzionalità in:
 ● XML over HTTP (ReST)

 ● web service “standard” SOAP

 ● formati “nativi” in base al runtime scelto

    – Java Serialization Protocol ed RMI over HTTP per JVM
    – AMF3 per Flash
    – JSON per AJAX




                                   Spring Meeting Settembre 2009   7
Elementi di scelta per backend RIA
●   Modalità di remoting già supportate dal
    runtime o disponibili tramite librerie
    aggiuntive o sviluppo custom
●   Serializzazione dati nativa o parsing
●   Compromesso fra effort di implementazione
    e performance, intesa come tempo di
    processing lato client e dati scambiati su rete




                             Spring Meeting Settembre 2009   8
Benchmarking
http://www.jamesward.com/census/




                              Spring Meeting Settembre 2009   9
La Flash Platform di Adobe




              Spring Meeting Settembre 2009   10
Flex in dettaglio
●   Flash/AIR
    Runtime web e desktop per Windows/Mac/Linux.
●   ActionScript 3
    linguaggio ad oggetti ECMA3 analogo a JavaScript
    introdotto con Flash versione 9
●   Flex SDK opensource
         – framework componenti grafici (e non solo)

        –   linguaggio dichiarativo MXML duale di AS3
        –   compilatore mxmlc da MXML e AS3 a SWF
        –   task per ant (per Maven vedi FlexMojos)
●   Flex (ora Flash) Builder IDE commerciale
    ambiente di sviluppo per Flex basato su Eclipse

                                 Spring Meeting Settembre 2009   11
BlazeDS

●   Cos'è?
    Soluzione “ufficiale” di Adobe per la
    realizzazione di backend in Java per
    applicazioni Flex
●   Nasce come prodotto server commerciale
    con nome Flex Data Services, a JavaPolis
    2007 viene presentato in versione
    opensource con nome BlazeDS insieme alla
    sua estensione commerciale LiveCycle Data
    Services.


                         Spring Meeting Settembre 2009   12
Cosa offre BlazeDS?




           Spring Meeting Settembre 2009   13
Come si configura BlazeDS
●   il file principale è services-config.xml che
    include a sua volta:
           – remote-services.xml per remoting

        –   messaging-services.xml per publish-subscribe
        –   proxy-services.xml per proxying SOAP/HTTP
              in assenza di file crossdomain.xml
●   contiene le configurazioni delle destination che
    identificano i servizi di backend con i quali interagisce
    il client Flex
●   ad ogni destination è associato una configurazione di
    un adapter verso l'implementazione del servizio


                                  Spring Meeting Settembre 2009   14
RemoteObject Flex API
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

   <mx:RemoteObject id="ro" destination="productService"/>

   <mx:DataGrid dataProvider="{ro.findAll.lastResult}"
      width="100%" height="100%"/>

   <mx:Button label="Get Data" click="ro.findAll()"/>

</mx:Application>


NB in questo caso il client Flex deve essere compilato insieme ad un
services-config.xml opportunamente configurato con la URL
associata alla destination “productService” indicata esplicitamente
oppure con i token di sostituzione e i rispettivi valori passati dal
compilatore mxmlc o da Flex Builder.



                                      Spring Meeting Settembre 2009    15
Mapping Java-Flex
Java                                     ActionScript
package it.jug...odel;                   package {


public class Product {                       [Bindable]
    private Integer id;                      [RemoteClass(alias="it...l.Product")]
    private String name;                     public class Product {
                                                 public var id:*;
    public Long getId() {                        public var name:String;
        return id;                           }
    }
                                         }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }
}


                                             Spring Meeting Settembre 2009           16
Spring Remoting
●   Modello generale per rendere accessibili
    esternamente i servizi Spring
●   Adatto ad interazioni sincrone request-
    response
●   Permette di implementare facilmente il
    backend di un'applicazione RIA
●   Grazie alle funzionalità offerte da Spring,
    NON devo necessariamente pensare la mia
    applicazione in funzione della tecnologia con
    cui il client può accedere


                            Spring Meeting Settembre 2009   17
Spring BlazeDS Integration


●   Progetto congiunto SpringSource e Adobe
    http://www.springsource.org/spring-flex
●   Implementa Spring Remoting per Flex
●   Semplifica la configurazione di BlazeDS
●   Usa di BlazeDS la serializzazione AMF3,
    tralasciando le funzionalità da “application
    server”
    => la scelta migliore per applicazioni RIA
        realizzate con Flex

                             Spring Meeting Settembre 2009   18
Cosa offre Spring BlazeDS Integration?
 ●   la servlet di BlazeDS non crea più le destination,
     ci pensa Spring con un Exporter adhoc!
 ●   Spring avvia il message broker di BlazeDS
 ●   un namespace adhoc per configurare Spring, flex
 ●   annotation (RemoteDestination) in alternativa alla
     configurazione via XML
 ●   SpringLoginCommand per integrare
     l'autenticazione di Spring Security
     → una versione “ufficiale” ed estesa di soluzioni
     già presenti in giro su internet per blog di Adobe
     e non (già raccolte in modo “non ufficiale” nel
     progetto FNA http://fna-v2.googlecode.com/)
                               Spring Meeting Settembre 2009   19
Un esempio

Realizzazione di un semplice servizio di yellow
pages:
● Interfaccia CompanyService

● Implementazione CompanyServiceImpl

● Model Company.java e Company.as

● Configurazione Exporter BlazeDS

     → per client Flex
● Configurazione Exporter CXF o Jersey su

  JSON
     → per client AJAX

                          Spring Meeting Settembre 2009   20
AOP e Spring Security

●   Come proteggere il nostro backend RIA?
●   Integro Spring Security via AOP non
    modificando la mia implementazione!
●   Spring Security supporta tutti i più noti
    meccanismi di autenticazione: su database,
    LDAP, NTLM e anche SSO come CAS
●   Integrazione con applicazioni web “classiche”
    su Spring MVC tramite la DispatcherServlet,
    implementazione del pattern FrontController


                           Spring Meeting Settembre 2009   21
AOP e Spring Security
http://www.mindtheflex.com/?p=67




                                   Spring Meeting Settembre 2009   22
Spring Remoting vs. Hibernate
●   Caso d'uso: devo pubblicare un servizio
    Spring che accede a database tramite
    Hibernate
●   Problema: come faccio a gestire le relazioni
    “lazy” nell'interazione con un client RIA
    senza avere la malefica
    LazyInitializationException?
●   Soluzione: tramite Spring AOP serializzo solo
    i dati che posso effettivamente spedire e
    ricevere, ad esempio solo gli ID degli oggetti
    in relazione!

                            Spring Meeting Settembre 2009   23
Messaging
●   Spring Remoting va bene per interazioni
    sincrone stile request-response, e per
    interazioni asincrone stile publish-subscribe?
●   Spring Integration è il nuovo progetto di
    Spring che definisce il modello astratto per
    gestirle e contiene implementazioni su JMS e
    POJO
●   Spring Integration è già supportato nella
    release 1.0.0 di Spring BlazeDS Integration,
    come adapter per il messaging.


                            Spring Meeting Settembre 2009   24
Publisher-Subscriber Flex API
<?xml version="1.0" encoding="UTF-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
     <mx:Script>
          <![CDATA[
               import mx.messaging.messages.AsyncMessage;

             private function send():void {
                  var messageBody:Object = {userId:userId.text, chatMessage: msg.text};
                  producer.send(new AsyncMessage(messageBody));
                  msg.text = "";
             }

             private function msgHandler(message:IMessage):void {
                  log.text += message.body.userId + ": " + message.body.chatMessage + "n";
             }
          ]]>
     </mx:Script>
     <mx:Producer id="producer" destination="chat"/>
     <mx:Consumer id="consumer" destination="chat" message="msgHandler(event.message)"/>
     <mx:TextArea id="log" width="100%" height="100%"/>
     <mx:TextInput id="userId" width="100"/>
     <mx:TextInput id="msg" width="100%" enter="send()"/>
</mx:Application>


NB su BlazeDS posso usare un Adapter ActionScript fra soli client Flex o un
JMS Adapter per interagire con una coda JMS, invece con Spring BlazeDS
Integration posso anche usare un channel POJO di Spring Integration o
inviare messaggi da server tramite la classe MessageTemplate
analogamente a quanto disponibile con SimpleMailMessage per JavaMail

                                                    Spring Meeting Settembre 2009             25
Spring ActionScript
●   Un IoC Container per ActionScript
●   Argina il proliferare di singleton nel codice
    Flex/AS3
●   nasce come Prana Framework da Cristophe
    Herreman: http://www.herrodius.com/
●   entra a far parte di Spring Extensions
●   Attualmente alla versione 0.8.1:
        –   configurazione object factory in XML con
              gestione namespace
        –   autowiring tramite metadata
        –   integrazione MVC generica più estensioni
              per Cairngorm e PureMVC
                                 Spring Meeting Settembre 2009   26
Spring ActionScript 101
●   Creo un oggetto AS3 come interfaccia ed
    implementazione
●   Lo aggiungo al file XML di Spring AS
●   Esternalizzo proprietà in un file di properties
    caricato dal file XML
●   Nella mia mx:Application effettuo il bootstrap
    di XmlApplicationContext oppure di
    FlexXmlApplicationContext
●   Annoto con metadata [Autowired] i reference
    cui voglio venga applicata la dependency
    injection

                             Spring Meeting Settembre 2009   27
RPC e Messaging namespace
●   aggiungo il supporto ai namespace al mio
    ApplicationContext di Spring ActionScript:
    applicationContext.addNamespaceHandler(new RPCNamespaceHandler());
    applicationContext.addNamespaceHandler(new MessagingNamespaceHandler());
●   dichiaro nell'intestazione del file XML lo schema relativo:
    <?xml version="1.0" encoding="UTF-8">
    <objects xmlns="http://www.springactionscript.org/schema/objects"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:messaging="http://www.springactionscript.org/schema/messaging"
      xsi:schemaLocation="http://www.springactionscript.org/schema/objects
      http://www.springactionscript.org/schema/objects/spring-actionscript-objects-1.0.xsd
      http://www.springactionscript.org/schema/messaging/spring-actionscript-messaging-
    1.0.xsd">

●   aggiungo i riferimenti ai miei RemoteObject in questo modo
    e configuro channel e channel set:
    <object id="amfChannel" class="mx.messaging.channels.AMFChannel">
      <property name="uri" value="${blazeds.url}"/>
    </object>
    <messaging:channel-set id="cs" channels="amfChannel"/>
    <rpc:remote-object id="ro" channel-set="cs" destination="productService"/>

●   esternalizzo le properties di configurazione
●   imposto i miei RemoteObject come dipendenze

                                                   Spring Meeting Settembre 2009             28
Red5

●   Cos'è?
    Server di streaming opensource in Java per
    client Flash alternativo a Flash Media Server.
●   Basato su:
        –   Spring
        –   Apache Mina
        –   Tomcat
●   Versione 0.8 stabile, in arrivo 0.9 RC1
●   Deployment come server standalone, war in
    application server ed embedded

                             Spring Meeting Settembre 2009   29
Cosa offre Red5?
●   Implementazione in reverse engineering del
    protocollo RTMP, reso pubblico a gennaio da
    Adobe, con supporto varianti RTMPS e
    RTMPT
●   Streaming Audio/Video
●   Recording Client Streams
●   Remote Shared Objects
●   Live Stream Publishing
●   Remoting (AMF) per Flex API
●   client-to-server method call
●   server-to-client method client
                           Spring Meeting Settembre 2009   30
Creare applicazioni Red5
●   WAR packaging
        –   WEB-INF
               ●   lib
               ●   classes
               ●   web.xml
               ●   red5-web.xml (configurazione spring)
               ●   red5-properties.xml (properties per
                     sostituzione placeholder spring)
●   Per deployment embedded bisogna
    aggiungere le configurazioni spring del
    server Red5

                                    Spring Meeting Settembre 2009   31
Come Red5 usa Spring
●   2 livelli di ApplicationContext
           – 1 parent application context

                   ●  red5-common.xml → beans del server Red5
                    ● red5-core.xml → endpoint Mina TCP


                    ● red5-default.xml → root context Red5 di default


          –   N child application context → per applicazione WAR
                   ●red5-web.xml
●   bean contenuti in un'application:
         – context

          –   1 o più scope
          –   handler → entry point dell'applicazione Red5, deve essere
                un bean del seguente tipo o sua sottoclasse:
                org.red5.server.adapter.ApplicationAdapter


                                            Spring Meeting Settembre 2009   32
Un'applicazione Red5
Java Server
package the.path.to.my;
import org.red5.server.adapter.ApplicationAdapter;
    public class Application extends ApplicationAdapter {
    public Double add(Double a, Double b){
        return a + b;
    }
}

ActionScript Client
nc = new NetConnection();
nc.connect("rtmp://localhost/myapp", "myusername", "mypassword");
nc.onResult = function(obj) {
    trace("The result is " + obj);
}
nc.call("add", nc, 1, 2);
ns = new NetStream(nc);
video = new Video();
// publish
ns.attachCamera(Camera.getCamera());
ns.publish("my-video", "live");
// play
video.attachNetStream(ns);
ns.play("your-video");


                                       Spring Meeting Settembre 2009   33
Red5 al posto di FMS?
SI!
●     sviluppo in Java con Spring invece che in script ActionScript
      NON a oggetti
           – maggiori possibilità di integrazione

          –   testing
          –   posso fare scripting anche in Groovy, Jython e JRuby
●     clustering con Terracotta
●     balancing con configurazione edge-origin ed MRTMP

Ma neanche per sogno!
● non è la soluzione ufficiale supportata da Adobe!

● non offre encryption tramite RTMPE che è un protocollo

  proprietario!

                                      Spring Meeting Settembre 2009   34
Riferimenti
●   Spring BlazeDS Integration
    http://www.springsource.com/spring-flex
●   Cristophe Coenraets Blog – esempi su Spring BlazeDS
    Integration
    http://coenraets.org/blog/
●   Flexmojos – plugin Maven per Flex
    http://flexmojos.sonatype.org/
●   Spring ActionScript
    http://www.springactionscript.org
●   Red5
    http://www.red5.org
●   “mavenized” Red5
    http://code.google.com/p/jakubiak-red5/


                                Spring Meeting Settembre 2009   35
Q&A




  Spring Meeting Settembre 2009   36

Mais conteúdo relacionado

Mais procurados

Osd 2016 Middleware Track
Osd 2016 Middleware TrackOsd 2016 Middleware Track
Osd 2016 Middleware TrackUgo Landini
 
ASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesAndrea Dottor
 
Generazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NETGenerazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NETStefano Ottaviani
 
Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5Marcello Teodori
 
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Codemotion
 
Sviluppo applicazioni in Ruby on Rails
Sviluppo applicazioni in Ruby on RailsSviluppo applicazioni in Ruby on Rails
Sviluppo applicazioni in Ruby on RailsNERDYDOG Web Agency
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Eugenio Minardi
 
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1Alfonso Martino
 
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Codemotion
 
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMRealizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMCodemotion
 
Spring Framework
Spring FrameworkSpring Framework
Spring FrameworkNaLUG
 
Evoluzione del web development dalle cgi ai microservices
Evoluzione del web development dalle cgi ai microservicesEvoluzione del web development dalle cgi ai microservices
Evoluzione del web development dalle cgi ai microservicesDaniele Mondello
 
Blazor - i limiti sono fatti per essere superati
Blazor - i limiti sono fatti per essere superatiBlazor - i limiti sono fatti per essere superati
Blazor - i limiti sono fatti per essere superatiCommit University
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiAndrea Dottor
 
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailDotNetMarche
 

Mais procurados (20)

Osd 2016 Middleware Track
Osd 2016 Middleware TrackOsd 2016 Middleware Track
Osd 2016 Middleware Track
 
ASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesASP.NET Core - Razor Pages
ASP.NET Core - Razor Pages
 
Generazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NETGenerazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NET
 
Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5Streaming in Java e Flex con Red5
Streaming in Java e Flex con Red5
 
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
 
Spa with Blazor
Spa with BlazorSpa with Blazor
Spa with Blazor
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
Sviluppo applicazioni in Ruby on Rails
Sviluppo applicazioni in Ruby on RailsSviluppo applicazioni in Ruby on Rails
Sviluppo applicazioni in Ruby on Rails
 
Ddive Xpage852
Ddive Xpage852Ddive Xpage852
Ddive Xpage852
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS
 
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
 
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
 
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMRealizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Evoluzione del web development dalle cgi ai microservices
Evoluzione del web development dalle cgi ai microservicesEvoluzione del web development dalle cgi ai microservices
Evoluzione del web development dalle cgi ai microservices
 
Blazor - i limiti sono fatti per essere superati
Blazor - i limiti sono fatti per essere superatiBlazor - i limiti sono fatti per essere superati
Blazor - i limiti sono fatti per essere superati
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi reali
 
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle Monorail
 

Semelhante a Spring e Flex

RIA: Rich Internet Applications. Interfacce utente avanzate per applicazioni ...
RIA: Rich Internet Applications. Interfacce utente avanzate per applicazioni ...RIA: Rich Internet Applications. Interfacce utente avanzate per applicazioni ...
RIA: Rich Internet Applications. Interfacce utente avanzate per applicazioni ...EvolutionBook S.r.l.
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDaniele Mondello
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Andrea Dottor
 
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2Bkino2k
 
Enterprise Spring and Flex applications
Enterprise Spring and Flex applicationsEnterprise Spring and Flex applications
Enterprise Spring and Flex applicationsmarcocasario
 
Developing Adobe AIR desktop applications
Developing Adobe AIR desktop applicationsDeveloping Adobe AIR desktop applications
Developing Adobe AIR desktop applicationsmarcocasario
 
Enterprise Rich Internet Applications con Java, Livecycle DS e Flex 3
Enterprise Rich Internet Applications con Java, Livecycle DS e Flex 3Enterprise Rich Internet Applications con Java, Livecycle DS e Flex 3
Enterprise Rich Internet Applications con Java, Livecycle DS e Flex 3marcocasario
 
Tesi Discussione
Tesi DiscussioneTesi Discussione
Tesi DiscussioneYeser Rema
 
Installazione del cms alfresco
Installazione del cms alfrescoInstallazione del cms alfresco
Installazione del cms alfrescoMirco Leo
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Andrea Agnoletto
 
I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)Diego La Monica
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)Sabino Labarile
 
Con Aruba, a lezione di cloud #lezione 31: 'API e Cloud Computing, personali...
Con Aruba, a lezione di cloud  #lezione 31: 'API e Cloud Computing, personali...Con Aruba, a lezione di cloud  #lezione 31: 'API e Cloud Computing, personali...
Con Aruba, a lezione di cloud #lezione 31: 'API e Cloud Computing, personali...Aruba S.p.A.
 
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformAngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformGabriele Gaggi
 
Applicazioni Serverless con AWS
Applicazioni Serverless con AWSApplicazioni Serverless con AWS
Applicazioni Serverless con AWSsparkfabrik
 
Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013
Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013
Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013Massimo Caliman
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012Crismer La Pignola
 
Modi innovativi per costruire App
Modi innovativi per costruire AppModi innovativi per costruire App
Modi innovativi per costruire AppCommit University
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web AppsAndrea Dottor
 

Semelhante a Spring e Flex (20)

RIA: Rich Internet Applications. Interfacce utente avanzate per applicazioni ...
RIA: Rich Internet Applications. Interfacce utente avanzate per applicazioni ...RIA: Rich Internet Applications. Interfacce utente avanzate per applicazioni ...
RIA: Rich Internet Applications. Interfacce utente avanzate per applicazioni ...
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0
 
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
 
Enterprise Spring and Flex applications
Enterprise Spring and Flex applicationsEnterprise Spring and Flex applications
Enterprise Spring and Flex applications
 
Developing Adobe AIR desktop applications
Developing Adobe AIR desktop applicationsDeveloping Adobe AIR desktop applications
Developing Adobe AIR desktop applications
 
Enterprise Rich Internet Applications con Java, Livecycle DS e Flex 3
Enterprise Rich Internet Applications con Java, Livecycle DS e Flex 3Enterprise Rich Internet Applications con Java, Livecycle DS e Flex 3
Enterprise Rich Internet Applications con Java, Livecycle DS e Flex 3
 
Tesi Discussione
Tesi DiscussioneTesi Discussione
Tesi Discussione
 
Installazione del cms alfresco
Installazione del cms alfrescoInstallazione del cms alfresco
Installazione del cms alfresco
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?
 
I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)I linguaggi del web - seconda edizione (3° giornata)
I linguaggi del web - seconda edizione (3° giornata)
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)
 
Con Aruba, a lezione di cloud #lezione 31: 'API e Cloud Computing, personali...
Con Aruba, a lezione di cloud  #lezione 31: 'API e Cloud Computing, personali...Con Aruba, a lezione di cloud  #lezione 31: 'API e Cloud Computing, personali...
Con Aruba, a lezione di cloud #lezione 31: 'API e Cloud Computing, personali...
 
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformAngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
 
Applicazioni Serverless con AWS
Applicazioni Serverless con AWSApplicazioni Serverless con AWS
Applicazioni Serverless con AWS
 
Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013
Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013
Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013
 
Java sul tuo Mac
Java sul tuo MacJava sul tuo Mac
Java sul tuo Mac
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012
 
Modi innovativi per costruire App
Modi innovativi per costruire AppModi innovativi per costruire App
Modi innovativi per costruire App
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web Apps
 

Mais de Marcello Teodori

Anatomy of an APS 2 appication
Anatomy of an APS 2 appicationAnatomy of an APS 2 appication
Anatomy of an APS 2 appicationMarcello Teodori
 
JavaScript Power Tools 2015
JavaScript Power Tools 2015JavaScript Power Tools 2015
JavaScript Power Tools 2015Marcello Teodori
 
Wicket from Designer to Developer
Wicket from Designer to DeveloperWicket from Designer to Developer
Wicket from Designer to DeveloperMarcello Teodori
 
m2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDEm2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDEMarcello Teodori
 
JBoss Seam, un framework per Java EE 5
JBoss Seam, un framework per Java EE 5JBoss Seam, un framework per Java EE 5
JBoss Seam, un framework per Java EE 5Marcello Teodori
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsMarcello Teodori
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaMarcello Teodori
 

Mais de Marcello Teodori (10)

Anatomy of an APS 2 appication
Anatomy of an APS 2 appicationAnatomy of an APS 2 appication
Anatomy of an APS 2 appication
 
Refactoring to a SPA
Refactoring to a SPARefactoring to a SPA
Refactoring to a SPA
 
JavaScript Power Tools 2015
JavaScript Power Tools 2015JavaScript Power Tools 2015
JavaScript Power Tools 2015
 
Wicket from Designer to Developer
Wicket from Designer to DeveloperWicket from Designer to Developer
Wicket from Designer to Developer
 
Software Factory in a Box
Software Factory in a BoxSoftware Factory in a Box
Software Factory in a Box
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
m2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDEm2eclipse: integrazione maven2 in eclipse IDE
m2eclipse: integrazione maven2 in eclipse IDE
 
JBoss Seam, un framework per Java EE 5
JBoss Seam, un framework per Java EE 5JBoss Seam, un framework per Java EE 5
JBoss Seam, un framework per Java EE 5
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con Java
 

Último

Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 

Último (9)

Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 

Spring e Flex

  • 1. Spring & Flex Marcello Teodori marcello.teodori@jugmilano.it Java User Group Milano http://www.jugmilano.it Spring Meeting Settembre 2009 - Cagliari
  • 2. Di cosa parleremo? ● Introduzione a RIA ● Flex ● BlazeDS ● Spring BlazeDS Integration ● Spring ActionScript ● Red5 Spring Meeting Settembre 2009 2
  • 3. Due parole sullo speaker ● Coordinatore del JUG Milano ● Moderatore SpringFramework-IT ● Moderatore Gruppo Italiano Utenti Groovy ● Socio e CTO in ExcogitaNet ● più twitterer: http://twitter.com/magomarcelo che blogger: http://magomarcelo.blogspot.com ● Prima presentazione su RIA a Java Conference '05 ● Speaker ad All4Web, evento RIA cross-community Spring Meeting Settembre 2009 3
  • 4. Definizione di Rich Internet Application "web applications have extended the reach of enterprises to customers, offering anywhere and anytime access. However, this has been at the expense of the overall user-experience, which is diminished by delivery through the web browser" Steven Webster e Alistair McLeod, autori del libro Flex Integration with J2EE, 2005 http://www.theserverside.com/articles/article.tss?l=Flex → un nuovo tipo di web application che ne superi i limiti? Caratteristiche: ● web deployment ● logica applicativa suddivisa fra client e server ● interazione immediata senza percezione di un roundtrip sul server ● accesso a contenuti rich: audio/video Spring Meeting Settembre 2009 4
  • 5. Architettura di Riferimento Spring Meeting Settembre 2009 5
  • 6. Client Runtime La scelta del runtime: ● JVM/JavaFX Il ritorno delle Applet in una veste più adatta al mondo RIA. Estensione sul desktop tramite Java WebStart. ● AJAX Magia tramite JavaScript e XMLHttpRequest. Estensione sul desktop tramite soluzioni browser-embedded come Prism. ● Flash/Flex Browser plugin per animazioni vettoriali, via via arrichitosi nelle versioni recenti di funzionalità applicative. Estensione sul Desktop tramite il runtime AIR. ● Silverlight Browser plugin che implementa una versione ridotta del runtime di .NET con funzioni GUI e media avanzate. Spring Meeting Settembre 2009 6
  • 7. Backend Qual è il backend più adatto per le RIA? Va bene qualsiasi soluzione di esportazione remota su internet di servizi, purché esponga le proprie funzionalità in: ● XML over HTTP (ReST) ● web service “standard” SOAP ● formati “nativi” in base al runtime scelto – Java Serialization Protocol ed RMI over HTTP per JVM – AMF3 per Flash – JSON per AJAX Spring Meeting Settembre 2009 7
  • 8. Elementi di scelta per backend RIA ● Modalità di remoting già supportate dal runtime o disponibili tramite librerie aggiuntive o sviluppo custom ● Serializzazione dati nativa o parsing ● Compromesso fra effort di implementazione e performance, intesa come tempo di processing lato client e dati scambiati su rete Spring Meeting Settembre 2009 8
  • 9. Benchmarking http://www.jamesward.com/census/ Spring Meeting Settembre 2009 9
  • 10. La Flash Platform di Adobe Spring Meeting Settembre 2009 10
  • 11. Flex in dettaglio ● Flash/AIR Runtime web e desktop per Windows/Mac/Linux. ● ActionScript 3 linguaggio ad oggetti ECMA3 analogo a JavaScript introdotto con Flash versione 9 ● Flex SDK opensource – framework componenti grafici (e non solo) – linguaggio dichiarativo MXML duale di AS3 – compilatore mxmlc da MXML e AS3 a SWF – task per ant (per Maven vedi FlexMojos) ● Flex (ora Flash) Builder IDE commerciale ambiente di sviluppo per Flex basato su Eclipse Spring Meeting Settembre 2009 11
  • 12. BlazeDS ● Cos'è? Soluzione “ufficiale” di Adobe per la realizzazione di backend in Java per applicazioni Flex ● Nasce come prodotto server commerciale con nome Flex Data Services, a JavaPolis 2007 viene presentato in versione opensource con nome BlazeDS insieme alla sua estensione commerciale LiveCycle Data Services. Spring Meeting Settembre 2009 12
  • 13. Cosa offre BlazeDS? Spring Meeting Settembre 2009 13
  • 14. Come si configura BlazeDS ● il file principale è services-config.xml che include a sua volta: – remote-services.xml per remoting – messaging-services.xml per publish-subscribe – proxy-services.xml per proxying SOAP/HTTP in assenza di file crossdomain.xml ● contiene le configurazioni delle destination che identificano i servizi di backend con i quali interagisce il client Flex ● ad ogni destination è associato una configurazione di un adapter verso l'implementazione del servizio Spring Meeting Settembre 2009 14
  • 15. RemoteObject Flex API <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:RemoteObject id="ro" destination="productService"/> <mx:DataGrid dataProvider="{ro.findAll.lastResult}" width="100%" height="100%"/> <mx:Button label="Get Data" click="ro.findAll()"/> </mx:Application> NB in questo caso il client Flex deve essere compilato insieme ad un services-config.xml opportunamente configurato con la URL associata alla destination “productService” indicata esplicitamente oppure con i token di sostituzione e i rispettivi valori passati dal compilatore mxmlc o da Flex Builder. Spring Meeting Settembre 2009 15
  • 16. Mapping Java-Flex Java ActionScript package it.jug...odel; package { public class Product { [Bindable] private Integer id; [RemoteClass(alias="it...l.Product")] private String name; public class Product { public var id:*; public Long getId() { public var name:String; return id; } } } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } Spring Meeting Settembre 2009 16
  • 17. Spring Remoting ● Modello generale per rendere accessibili esternamente i servizi Spring ● Adatto ad interazioni sincrone request- response ● Permette di implementare facilmente il backend di un'applicazione RIA ● Grazie alle funzionalità offerte da Spring, NON devo necessariamente pensare la mia applicazione in funzione della tecnologia con cui il client può accedere Spring Meeting Settembre 2009 17
  • 18. Spring BlazeDS Integration ● Progetto congiunto SpringSource e Adobe http://www.springsource.org/spring-flex ● Implementa Spring Remoting per Flex ● Semplifica la configurazione di BlazeDS ● Usa di BlazeDS la serializzazione AMF3, tralasciando le funzionalità da “application server” => la scelta migliore per applicazioni RIA realizzate con Flex Spring Meeting Settembre 2009 18
  • 19. Cosa offre Spring BlazeDS Integration? ● la servlet di BlazeDS non crea più le destination, ci pensa Spring con un Exporter adhoc! ● Spring avvia il message broker di BlazeDS ● un namespace adhoc per configurare Spring, flex ● annotation (RemoteDestination) in alternativa alla configurazione via XML ● SpringLoginCommand per integrare l'autenticazione di Spring Security → una versione “ufficiale” ed estesa di soluzioni già presenti in giro su internet per blog di Adobe e non (già raccolte in modo “non ufficiale” nel progetto FNA http://fna-v2.googlecode.com/) Spring Meeting Settembre 2009 19
  • 20. Un esempio Realizzazione di un semplice servizio di yellow pages: ● Interfaccia CompanyService ● Implementazione CompanyServiceImpl ● Model Company.java e Company.as ● Configurazione Exporter BlazeDS → per client Flex ● Configurazione Exporter CXF o Jersey su JSON → per client AJAX Spring Meeting Settembre 2009 20
  • 21. AOP e Spring Security ● Come proteggere il nostro backend RIA? ● Integro Spring Security via AOP non modificando la mia implementazione! ● Spring Security supporta tutti i più noti meccanismi di autenticazione: su database, LDAP, NTLM e anche SSO come CAS ● Integrazione con applicazioni web “classiche” su Spring MVC tramite la DispatcherServlet, implementazione del pattern FrontController Spring Meeting Settembre 2009 21
  • 22. AOP e Spring Security http://www.mindtheflex.com/?p=67 Spring Meeting Settembre 2009 22
  • 23. Spring Remoting vs. Hibernate ● Caso d'uso: devo pubblicare un servizio Spring che accede a database tramite Hibernate ● Problema: come faccio a gestire le relazioni “lazy” nell'interazione con un client RIA senza avere la malefica LazyInitializationException? ● Soluzione: tramite Spring AOP serializzo solo i dati che posso effettivamente spedire e ricevere, ad esempio solo gli ID degli oggetti in relazione! Spring Meeting Settembre 2009 23
  • 24. Messaging ● Spring Remoting va bene per interazioni sincrone stile request-response, e per interazioni asincrone stile publish-subscribe? ● Spring Integration è il nuovo progetto di Spring che definisce il modello astratto per gestirle e contiene implementazioni su JMS e POJO ● Spring Integration è già supportato nella release 1.0.0 di Spring BlazeDS Integration, come adapter per il messaging. Spring Meeting Settembre 2009 24
  • 25. Publisher-Subscriber Flex API <?xml version="1.0" encoding="UTF-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script> <![CDATA[ import mx.messaging.messages.AsyncMessage; private function send():void { var messageBody:Object = {userId:userId.text, chatMessage: msg.text}; producer.send(new AsyncMessage(messageBody)); msg.text = ""; } private function msgHandler(message:IMessage):void { log.text += message.body.userId + ": " + message.body.chatMessage + "n"; } ]]> </mx:Script> <mx:Producer id="producer" destination="chat"/> <mx:Consumer id="consumer" destination="chat" message="msgHandler(event.message)"/> <mx:TextArea id="log" width="100%" height="100%"/> <mx:TextInput id="userId" width="100"/> <mx:TextInput id="msg" width="100%" enter="send()"/> </mx:Application> NB su BlazeDS posso usare un Adapter ActionScript fra soli client Flex o un JMS Adapter per interagire con una coda JMS, invece con Spring BlazeDS Integration posso anche usare un channel POJO di Spring Integration o inviare messaggi da server tramite la classe MessageTemplate analogamente a quanto disponibile con SimpleMailMessage per JavaMail Spring Meeting Settembre 2009 25
  • 26. Spring ActionScript ● Un IoC Container per ActionScript ● Argina il proliferare di singleton nel codice Flex/AS3 ● nasce come Prana Framework da Cristophe Herreman: http://www.herrodius.com/ ● entra a far parte di Spring Extensions ● Attualmente alla versione 0.8.1: – configurazione object factory in XML con gestione namespace – autowiring tramite metadata – integrazione MVC generica più estensioni per Cairngorm e PureMVC Spring Meeting Settembre 2009 26
  • 27. Spring ActionScript 101 ● Creo un oggetto AS3 come interfaccia ed implementazione ● Lo aggiungo al file XML di Spring AS ● Esternalizzo proprietà in un file di properties caricato dal file XML ● Nella mia mx:Application effettuo il bootstrap di XmlApplicationContext oppure di FlexXmlApplicationContext ● Annoto con metadata [Autowired] i reference cui voglio venga applicata la dependency injection Spring Meeting Settembre 2009 27
  • 28. RPC e Messaging namespace ● aggiungo il supporto ai namespace al mio ApplicationContext di Spring ActionScript: applicationContext.addNamespaceHandler(new RPCNamespaceHandler()); applicationContext.addNamespaceHandler(new MessagingNamespaceHandler()); ● dichiaro nell'intestazione del file XML lo schema relativo: <?xml version="1.0" encoding="UTF-8"> <objects xmlns="http://www.springactionscript.org/schema/objects" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:messaging="http://www.springactionscript.org/schema/messaging" xsi:schemaLocation="http://www.springactionscript.org/schema/objects http://www.springactionscript.org/schema/objects/spring-actionscript-objects-1.0.xsd http://www.springactionscript.org/schema/messaging/spring-actionscript-messaging- 1.0.xsd"> ● aggiungo i riferimenti ai miei RemoteObject in questo modo e configuro channel e channel set: <object id="amfChannel" class="mx.messaging.channels.AMFChannel"> <property name="uri" value="${blazeds.url}"/> </object> <messaging:channel-set id="cs" channels="amfChannel"/> <rpc:remote-object id="ro" channel-set="cs" destination="productService"/> ● esternalizzo le properties di configurazione ● imposto i miei RemoteObject come dipendenze Spring Meeting Settembre 2009 28
  • 29. Red5 ● Cos'è? Server di streaming opensource in Java per client Flash alternativo a Flash Media Server. ● Basato su: – Spring – Apache Mina – Tomcat ● Versione 0.8 stabile, in arrivo 0.9 RC1 ● Deployment come server standalone, war in application server ed embedded Spring Meeting Settembre 2009 29
  • 30. Cosa offre Red5? ● Implementazione in reverse engineering del protocollo RTMP, reso pubblico a gennaio da Adobe, con supporto varianti RTMPS e RTMPT ● Streaming Audio/Video ● Recording Client Streams ● Remote Shared Objects ● Live Stream Publishing ● Remoting (AMF) per Flex API ● client-to-server method call ● server-to-client method client Spring Meeting Settembre 2009 30
  • 31. Creare applicazioni Red5 ● WAR packaging – WEB-INF ● lib ● classes ● web.xml ● red5-web.xml (configurazione spring) ● red5-properties.xml (properties per sostituzione placeholder spring) ● Per deployment embedded bisogna aggiungere le configurazioni spring del server Red5 Spring Meeting Settembre 2009 31
  • 32. Come Red5 usa Spring ● 2 livelli di ApplicationContext – 1 parent application context ● red5-common.xml → beans del server Red5 ● red5-core.xml → endpoint Mina TCP ● red5-default.xml → root context Red5 di default – N child application context → per applicazione WAR ●red5-web.xml ● bean contenuti in un'application: – context – 1 o più scope – handler → entry point dell'applicazione Red5, deve essere un bean del seguente tipo o sua sottoclasse: org.red5.server.adapter.ApplicationAdapter Spring Meeting Settembre 2009 32
  • 33. Un'applicazione Red5 Java Server package the.path.to.my; import org.red5.server.adapter.ApplicationAdapter; public class Application extends ApplicationAdapter { public Double add(Double a, Double b){ return a + b; } } ActionScript Client nc = new NetConnection(); nc.connect("rtmp://localhost/myapp", "myusername", "mypassword"); nc.onResult = function(obj) { trace("The result is " + obj); } nc.call("add", nc, 1, 2); ns = new NetStream(nc); video = new Video(); // publish ns.attachCamera(Camera.getCamera()); ns.publish("my-video", "live"); // play video.attachNetStream(ns); ns.play("your-video"); Spring Meeting Settembre 2009 33
  • 34. Red5 al posto di FMS? SI! ● sviluppo in Java con Spring invece che in script ActionScript NON a oggetti – maggiori possibilità di integrazione – testing – posso fare scripting anche in Groovy, Jython e JRuby ● clustering con Terracotta ● balancing con configurazione edge-origin ed MRTMP Ma neanche per sogno! ● non è la soluzione ufficiale supportata da Adobe! ● non offre encryption tramite RTMPE che è un protocollo proprietario! Spring Meeting Settembre 2009 34
  • 35. Riferimenti ● Spring BlazeDS Integration http://www.springsource.com/spring-flex ● Cristophe Coenraets Blog – esempi su Spring BlazeDS Integration http://coenraets.org/blog/ ● Flexmojos – plugin Maven per Flex http://flexmojos.sonatype.org/ ● Spring ActionScript http://www.springactionscript.org ● Red5 http://www.red5.org ● “mavenized” Red5 http://code.google.com/p/jakubiak-red5/ Spring Meeting Settembre 2009 35
  • 36. Q&A Spring Meeting Settembre 2009 36