<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
MARCO CASARIOCTO – Comtastehttp://casario.blogs.com
Enterprise RIAs con Spring e Flex
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Exploring new frontiers in Rich Internet Applications
Maximizing the User Experiences
Mission
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
The technologies we use:
� J2EE (Java, JSP, Hibernate, EJB3, Struts, Spring)� Ajax� Flash� Flex� AIR� Flash Media Server
Technologies
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Who can make it possible
Team
J2EE Developers Flex/Flash Developers Creative UI Designers
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Showcase
Maggioli S.p.A.è una delle più grandi realtà italiane nell'ambito della fornitura di prodotti e servizi per la PAL con particolare impegno nella produzione e assistenza di software gestionali per gli enti.
Noi per Loro
•Orientamento tecnologico•Formazione•Menthoring•User Interface Design
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
INPDAP
Noi per Loro
Sviluppo , user interface design e deploy di una piattaforma RIA per archiviazione, distribuzione e ricerca di delibere e circolari
Showcase
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Showcase
Dashboard applications
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Showcase
Comtaste Open Source Projects
Pantaste (http://code.google.com/p/pantaste/)
A library to create ActionScript-based personalized start page or personal web portal much like iGoogle, My Yahoo!, Netvibes etc
DAO-EXT (http://code.google.com/p/dao-ext/)
an Adobe AIR tool that allows developers to automatically generate ActionScript Data Access Objects (DAO) and Value Objects starting from a local SQLite database.
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
CASE HISTORIESShowcase
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Partnership
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Upcoming
Spring-Flex Training
Comtaste ha creato un percorso didattico rivolto a chi già utilizza Flex in ambiente Enterprise e
vuole esplorare le possibilità di integrazione con Spring.
Corsi Spring in Italiano
Comtaste e SpringSource stanno lavorando insieme per offrire corsi
di Spring in lingua italiana.
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
My books
WWW.COMTASTE.COM
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
My books
WWW.COMTASTE.COM
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
My books
GEN 09WWW.COMTASTE.COM
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
My Books
WWW.COMTASTE.COM
Advanced AIR Applications
Professional Flash Catalyst
Flex 4 Solutions
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Who I am
WWW.COMTASTE.COM
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
� Flash Platform Overview� Flex 4 e Flash Catalyst� Livecycle DS� BlazeDS� Integrazione con Spring� Q & A
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Flash Builder
Flash CS4 Professional
Tools to Design and Develop
Clients
Servers/Services
Framework
AMF, XML, JSON, SOAP, RSS, ATOM, etc.HTTP/S, Sockets, RTMP, etc.
Flash Catalyst
Flex
Flash Media Server Family
Flash Player
AIR
BlazeDSData Services
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex 3 è Open Source
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Dashboard con Flex
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Ecosistema Flex
Createimmersive experiences and
video content
Transformartwork into functional application
user interfaces
Developcross-platform rich Internet applications
Enabling developers and designers to collaboratively build applications and interactive content
Interaction design tool for designers to rapidly create
Flex application user interfaces without coding
IDE for software developers to rapidly build cross-platform applications using the Flex framework and interactive content using ActionScript
Authoring tool for designers and developers who want to
create free-form and immersive
interactive content
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Migrazione Flex 4
Flex frameworkAligning Flex brand with the open source
framework underlying both FB and FC
FLEX 3 GENERATION FLEX 4 GENERATION
FlashBuilder
FlashCatalys t
Flex framework, Flex Builder
Consistent branding for tools
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
ProduttivitàRapid design and development
Integrazione con Servers e ServicesQuickly and easily integrate with existing infrastructure
Applicazioni ad alta user experienceBuild more expressive applications and content
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Focus point Flex 4
Design in Mind
Developer Productivity
Framework Evolution
� Spark component model
� MXML 2009
� FXG
� Improved states, effects, and layout
� High-fidelity Text
� New Video Component
� Compiler performance
� 2-way binding
� CSS Improvements
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex 4Flex 4 Component Model (Spark)
WWW.COMTASTE.COM
ActionScript MXML
GraphicsLayoutAnimationPartsStates
Component Skin
CSS properties
BehaviorLogicData
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
FXG
FXG: grafica a compile time
After Effects Fireworks
InteractiveContent
Animation
Visual Layout
Prototyping
Design/DevelopWorkflow
Eclipse IDE
Code Profiling
Debugging
Flash CS4Professional
FlashCatalyst
FlashBuilder
Illustrator Photoshop
FXG
FXG: formato grafico basato su MXML
• Di facile comprensione per i designers
• Basato sul flash rendering model• Statico – no binding, layout, event
handlers, styling, etc• Ottimizzato dal compiler (alte
performance)
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flash Catalyst
• A professional interaction design tool for rapidly creating the user experience of applications and interactive content without coding
Flash Catalyst
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flash Catalyst
� Interactive Web Designers / Interaction Designers
� Responsible for the visual design of interactive experiences created at agencies. Uses tools like
Photoshop, Illustrator, and Fireworks to design the layout and assets - but increasingly wants
to design the “behavior” of the interface.
� Information Architects
� Responsible for creating the high-level interaction models for the media and experiences.
Involved in the early wireframes and ideation process
� Graphic Designers and Creative Directors
� Aspire to do interactive pieces or showcase sites without having to write code.
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex Applications
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Architettura
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
AMF3 Binary Data Transfer
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
LCDS
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
LCDS
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
BlazeDS
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Comparison: BlazeDS, LCDS
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
BlazeDS
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Perché Flex e Spring insieme
Spring è di fatto uno standard emergente per il business tier delle applicazioni Java Enterprise
Flex rappresenta lo standard per le RIA
Nell’integrazione lo sviluppatore non deve abbandonare l’approccio server side di Spring
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Lo sviluppatore Spring è “attratto” dall’approccio di sviluppo:
• Configurazione di differenti tecnologie• Transizione semplice tra “standard” e “enterprise”• Migrazione da Local transactions e JTA non
richiedono codice
Perché Flex e Spring insieme
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Remoting Service
Permette al client di invocare metodi di oggetti sull’application server
Le informazioni tipizzate (Java / AS) sono mantenute
Encoding dei dati in formato binario
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Remoting Service
BlazeDS viene configurato attraverso una serie di file:
• Services-config.xml• Remote-services.xml• Messaging-services.xml• Proxy-services.xml
Questi file contengono le informazioni delle destination per i servizi remoti e gli adapter per l’implementazione di servizi
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Flex Remoting: le basi
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Flex Remoting: le basi
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
SpringFactory: il vecchio approccio
Nel vecchio approccio veniva utilizzata una classe SpringFactory che però aveva degli svantaggi:
• Utilizzava un approccio “dependency lookup”• Necessità di molteplici configurazioni
Il vecchio approccio è stato una barriera per l’adozione di Flex e BlazeDS dagli sviluppatori Spring.
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
SpringFactory: il vecchio approccio
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Spring-Flex:il nuovo approccio
Con una collaborazione tra Adobe e SpringSource è nato il progetto Spring-Flex:
• Semplificare la configurazione di BlazeDS• Usare il MessageBroker di BlazeDS come un bean
“Spring-managed”• Indirizzare i messaggi http di flex al MessageBroker
attraverso lo Spring DispatcherServlet
http://www.springsource.org/spring-flex
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Spring-Flex:il nuovo approccio
Per usare Spring-Flex bisogna avere i seguenti requisiti:
• Java 5 o +• Adobe BlazeDS 3.2 o +• Spring 2.5 con dependencies o +
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Spring-Flex:configurazione
Dopo aver scaricato ed installato BlazeDS e Spring BlazeDS Integration dovrete configurare il MessageBroker:
• È il componente responsabile per gestire i messaggi HTTP dal client Flex
• È gestito da Spring• I messaggi sono passati al MessageBroker di Spring
attraverso la DispatcherServlet di Spring
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Spring-Flex:configurazione
La DispatcherServlet è configurata nel bootstrap di Spring nell’WebApplicationContext (file web.xml):
<servlet-class>
org.spring.framework.web.servlet. DispatcherServlet
</servlet-class>
• Prima era:flex.messaging.MessageBrokerServlet
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Spring-Flex:configurazione
Nell’applicationContext.xml file di BlazeDS vanno aggiunti i seguenti beans:
• SimpleUrlHandlerMapping
• MessageBrokerHandlerAdapter
• MessageBrokerFactoryBean (da flex.messaging)
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Spring-Flex:configurazione
A questo punto Spring gestisce il MessageBroker per permettere ai beans di essere connessi direttamente alle remoting call di Flex.
In questo modo le operazioni di serializzazione e deserializzazione tra Java e AMF avvengono automaticamente
Questo ci permette di non scrivere molto codice di configurazione nel file remoting-config.xml
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Nomi di metodi riservati per RemoteObject
If a remote method has the same name as a method defined by the RemoteObject class, or by any of its parent classes, then you cannot call the remote method directly. The RemoteObject class defines the following method names:
propertyIsEnumerable()
setCredentials()
setPropertyIsEnumerable()
setRemoteCredentials()
toString()
valueOf()
disconnect()
getOperation()
hasOwnProperty()
initialized()
isPrototypeOf()
logout()
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Spring-Flex: Sicurezza
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Spring-Flex: Messaging
Il progetto già prevede la compatibilità col nuovo sistema di Spring Integration per le comunicazione asincrone
Integrazione con BlazeDS MessageService senza usare la configurazione del file message-services.xml
Sono esposti adapters per Spring JMS e SpringIntegration per permettere la comunicazione tra il client Flex e i message-driven POJOs di Spring
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Spring BlazeDS: il futuro
Queste sono alcune delle nuove features in fase di implementazione per la prossima versione del progetto:
– Spring 3 REST integration
– Supporto per client-types multipli
– Supporto alla serializzazione Hibernate
– Semplicità nella serializzazione di entità Hibernate a AMF senza l’errore LazyInitializationException
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Spring e Livecycle Data Services
Adobe sta lavorando all’integrazione con LCDS:
– Data Assembler configurati come Spring beans
– SpringHibernateAssembler che utilizza un HibernateSessionFactory di Spring (equivalente dell’Assembler JPA)
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Spring ActionScript
Il progetto è mantenuto dallo stesso creatore del Prana framework (http://www.springactionscript.org/)
E’ entrato a far parte di Spring Extension
Il framework contiene un Inversion of Control Container, un MVCS framework, estensioni per Cairngorm e PureMVC frameworks e altre utilities.
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Flex + Spring
Spring ActionScript
E’ un container ActionScript che applica il design pattern IoC:
IoC tende a tener disaccoppiati i singoli componenti di un sistema, in cui le eventuali
dipendenze non vengono scritte all'interno del componente stesso, ma gli vengono
iniettate dall'esterno: non si segue il normale flusso di controllo dei linguaggi imperativi,
in cui, nel momento del bisogno, si richiamano funzioni di classi o librerie esterne, gli
oggetti quindi non istanziano e richiamano gli oggetti dal quale il loro lavoro dipende,
ma queste funzionalità vengono fornite da un ambiente esterno tramite dei contratti
definiti da entrambe le entità.
La Dependency Injection è una delle tecniche con le quali si può attuare l'IOC.
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Sample application : EmployeeService
� Tecnologie� Flex 4
� Spring 2.5.6
� Tomcat 6
� MySql 5
� Java 6
Si vuole illustrare come si semplificala configurazione
di un'applicazione che richiede
Front-end in FlexBack-end in Spring
Grazie alla Spring BlazeDS Integration
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Back-end : Entity
� EmployeeEntity
� Nome
� Cognome
� Indirizzo
� Categoria : Analyst – Consultant – Junior - Manager
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Layer architecture
Dati DAOSpringBean
Front-endBack-end – ORM JPA
Employee
-Name-Surname-Address-Mail-WorkCategory :
-Analyst-Consultant-Junior-Manager
EmployeeDAO
Riferimento a SimpleJdbcTemplate
EmployeeService
Riferimento EmployeeDAO
Flex application
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Front-end : Flex
Vediamo l’applicazione
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Configurazione Spring BlazeDS Integration
� Configurazione ed uso del Message-broker
� Configurare Message-broker in app-context.xml
� Configurazione del mapping delle request del client Flex verso il Message-broker
� BlazeDS Remoting service & Remoting-destination
� Consentire l'exporting dei bean di Spring per le chiamate remote da un client Flex
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Configurazione ed uso del Message-broker
� Configurare Message-broker in app-context.xml
� Configurazione del mapping delle request del client Flex verso il Message-broker
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Config Message-broker
� Aggiungere Flex namespace<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:flex="http://www.springframework.org/schema/flex"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/flex http://www.springframework.org/schema/flex/spring-flex-1.0.xsd">
...<beans>
� Message-broker tag per la configurazione di default
<flex:message-broker/>
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Mapping requests to Message-broker (1/3)
� DispatcherServlet mapping in web.xml<servlet>
<servlet-name>BlazeServlet</servlet-name><servletclass>org.springframework.web.servlet.DispatcherServlet</servlet-
class> <init-param><param-name>contextConfigLocation</param-name><param-value> /WEB-INF/spring/app-context.xml </param-value>
</init-param><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>BlazeServlet</servlet-name><url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Mapping requests to Message-broker (2/3)
� HanlderMapping nello Spring app-context.xml
<!-- Mappa le request indirizzate a /* verso il BlazeDS MessageBroker --><bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings"><value>
/*=_messageBroker</value>
</property></bean>
<!-- Effettua il dispatch delle request mappate verso MessageBroker --><bean class="org.springframework.flex.servlet.MessageBrokerHandlerAdapter"/>
Il setup di default installato dal <flex:message-broker/>è equivalente a
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Mapping requests to Message-broker (3/3)
� Channel definition in the BlazeDS services-config.xml
<channel-definition id="my-amf"
class="mx.messaging.channels.AMFChannel"><endpoint url="http://{server.name}:{server.port}/
{context.root}/messagebroker/amf"class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Exporting Spring Beans per Flex remoting
� Remoting service
� Remoting destination tag
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Remoting service
<?xml version="1.0" encoding="UTF-8"?><service id="remoting-service" class="flex.messaging.services.RemotingService">
<adapters><adapter-definition id="java-object"
class="flex.messaging.services.remoting.adapters.JavaAdapter"default="true"/>
</adapters></service>
L'inclusione del tag message-broker per dafult include la seguente configurazioneche normalmente viene inclusa nel remote-config.xml
Bisogna comunque dichiarare un canale di defaultincludendone la dichiarazione nel services-config.xml
<services><default-channels>
<channel ref="my-amf"/></default-channels>
</services>
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
Remoting-destination tag
Serve ad esportare gli esistenti servizi gestiti da Springper consentire il remoting diretto da un client Flex
<!-- Bean employeeService --><bean id="employeeService" class="service.EmployeeService">
<constructor-arg ref="employeeDAO" /></bean>
<!-- REMOTING DESTINATION TAG --><flex:remoting-destination ref="employeeService" />
Data la seguente definizione di Spring bean
Il seguente tag remoting-destination espone il servizio ad un client Flex come servizio remoto chiamato employeeService
<speaker name> – <email> – <company/community>
Javaday IV – Roma – 30 gennaio 2010
MARCO CASARIOCTO – Comtastehttp://casario.blogs.com