Una panoramica sulle diverse possibilità offerte da Spring per applicazioni RIA realizzate in Flex: Spring sul server per l'implementazione di un backend con serializzazione nativa AMF3 con Spring BlazeDS integration, Spring sul client con Spring ActionScript e Spring come usato dallo streaming server opensource Red5 per la realizzazione di applicazioni video. Presentazione tenuta allo Spring Framework Meeting di Settembre 2009 a Cagliari.
In questa presentazione verrà introdotto brevemente il concetto di RIA (Rich Internet Application), di Framework e fondendo i due concetti verranno presentati alcuni dei più conosciuti Framework per la realizzazione di RIA. Visualizza la presentazione.
Lo Spring Framework viene ancora una volta incontro agli sviluppatori Java semplificandone la vita, questa volta vedremo come implementare facilmente uno strato servizi stateless da rendere disponibile remotamente nei diversi formati fruibili dalle diverse tecnologie client RIA, introducendo i concetti di Exporter e Proxy di Spring Remoting. Tutto questo tramite pura configurazione, via XML o annotation a seconda dei gusti, e con un esempio specifico in Flex con Spring BlazeDS Integration.
In questa presentazione verrà introdotto brevemente il concetto di RIA (Rich Internet Application), di Framework e fondendo i due concetti verranno presentati alcuni dei più conosciuti Framework per la realizzazione di RIA. Visualizza la presentazione.
Lo Spring Framework viene ancora una volta incontro agli sviluppatori Java semplificandone la vita, questa volta vedremo come implementare facilmente uno strato servizi stateless da rendere disponibile remotamente nei diversi formati fruibili dalle diverse tecnologie client RIA, introducendo i concetti di Exporter e Proxy di Spring Remoting. Tutto questo tramite pura configurazione, via XML o annotation a seconda dei gusti, e con un esempio specifico in Flex con Spring BlazeDS Integration.
- MicroServices, le dimensioni non contano
- Wildfly Swarm, Spring Boot & Vertx.io: il nuovo che avanza
- Microservices con JBoss EAP 7: innovare in continuità
- Microregole per grandi progetti con il BRMS
- Integrazione e microservizi: come un cammello può passare dalla cruna di un ago
- API Management con 3Scale nell’era dei microservizi
Non stiamo parlando di un ritorno a WebForm ma di un'evoluzione (o meglio) di un'alternativa al pattern MVC. Le Razor Pages possono essere un buon motore per smuovere le migrazioni di vecchie applicazioni, utilizzando un paradigma di pagina (vicino a quello che chi utilizza WebForm già conosce) ma con una visione e pulizia degna delle migliori applicazioni MVC .
Ecco che le Razor Pages si stanno ritagliano il loro spazio, ed in questa sessione cercheremo di affrontare i pro e contro del loro utilizzo, capendone al meglio i casi duso ideali.
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Codemotion
Codemotion Rome 2015 - Costruiamo con Spring Boot una applicazione Java EE con transazioni multiple JDBC-JMS utilizzando H2 e HornetQ (embedded in memory), il supporto di autoconfiguration JAX-RS (Jersey), le annotazioni JSR 250 per i lifecycle hooks, e le annotazioni JSR 330 utilizzabili per AS proprietari e per la portabilità in container di dependency injection come Spring. Per finire distribuiremo su Undertow embedded HTTTP server, su un AS standalone (Apache TomEE) e come PAAS su Cloud Foundry.
NerdyDog sviluppa applicazioni web in Ruby on Rails, il framework open souce MVC (Model View Controller) basato su Ruby.
Con Ruby on Rails , oppure RoR è possibile sviluppare applicazioni in modo semplice diminuendo la percentuale di codice che solitamente va a ripetersi nelle applicazioni.
Il pattern Model View Controller infatti è una pratica di programmazione che semplifica la separazione tra presentazione dei dati, logica della app e contenuti.
Le app sviluppate in Ruby on Rails sono particolarmente indicate per progetti dinamici, flessibili che necessitano aggiornamenti continui o ampliamenti futuri come possono essere ad esempio le Start up.
http://nerdydog.it/6-sviluppo-applicazioni
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1Alfonso Martino
Questo slide rappresentano un approfondimento su Runtime Fabric - il modello di deployment containerizzato di MuleSoft.
Al loro interno troverete:
- Panoramica su Runtime Fabric
- Setup e configurazione di un cluster su cloud AWS
- Deployment di un'API di test
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Codemotion
Realizzare un’unica piattaforma che garantisce Omni-channel, Zero-downtime, Functional-decomposition e Auto-scaling è possibile? Vi raccontiamo un caso reale di come, utilizzando Zuul, Eureka, SpringBoot, Docker abbiamo realizzato i desideri del cliente e attuato questa trasformazione.
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMCodemotion
"Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM" by Matteo Pagani.
Xamarin è una delle tecnologie più interessanti quando si parla di sviluppo cross-platform, in quanto permette di riutilizzare le proprie conoscenze di C# per realizzare applicazioni con le stesse feature e performance di un'applicazione nativa. Usare Xamarin, però, non significa solamente poter realizzare app Android e iOS in C#, ma anche e soprattutto non dover scrivere e mantenere codebase completamente diverse. In questa sessione vedremo come poter massimizzare il riutilizzo di codice tra le diverse versioni della nostra applicazioni, aiutandoci con il pattern MVVM.
Evoluzione del web development dalle cgi ai microservicesDaniele Mondello
Come si è sviluppato negli ultimi 20 anni lo sviluppo web? Nel Talk tenutosi all'incubatore Arca di Palermo per la masterclass di Angular 4 abbiamo fatto una cavalcata che ci ha portato dalle cgi in Perl ai Microservices
Utilizzando alcuni degli standard web più moderni, Microsoft ha realizzato Blazor: una soluzione che permette ai programmatori .NET di riutilizzare le proprie conoscenze per la realizzazione della user interface delle proprie applicazioni.
Già disponibile per l’uso in produzione con una versione server-side, verrà rilasciata a Maggio una versione client-side basata su WebAssembly, che permetterà lo sviluppo di una Single Page Application in C# eseguita interamente nel browser.
Ma la roadmap non si ferma qui, perchè sono già disponibili le prime versioni sperimentali per l’utilizzo di questa tecnologia anche su Desktop e Mobile!
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
Introduzione al framework Java Spring e Maven per realizzare API REST.
Breve introduzione all'uso di Maven per configurare un progetto SpringBoot e realizzare un server REST.
Disponibile il codice dimostrativo su github (link nelle slide, attenzione alle branch).
Valerio Radice (valix85)
Luglio 2017
In questa serata cercheremo di capire perchè Blazor ha riscosso così tanto successo, e lo faremo analizzando casi presi da applicazioni reali dove questa tecnologia è stata introdotta, così da capirne meglio le potenzialità (ma anche le eventuali criticità).
Come di consuetudine, faremo poi un confronto, così da condividere i vari punti di vista.
Presentazione alla Google Dev Fest Mediterranean 2016 di Catania con presentazione sulle metodologie di utilizzo di microservices e sui sistemi per monitorare le infrastrutture
- MicroServices, le dimensioni non contano
- Wildfly Swarm, Spring Boot & Vertx.io: il nuovo che avanza
- Microservices con JBoss EAP 7: innovare in continuità
- Microregole per grandi progetti con il BRMS
- Integrazione e microservizi: come un cammello può passare dalla cruna di un ago
- API Management con 3Scale nell’era dei microservizi
Non stiamo parlando di un ritorno a WebForm ma di un'evoluzione (o meglio) di un'alternativa al pattern MVC. Le Razor Pages possono essere un buon motore per smuovere le migrazioni di vecchie applicazioni, utilizzando un paradigma di pagina (vicino a quello che chi utilizza WebForm già conosce) ma con una visione e pulizia degna delle migliori applicazioni MVC .
Ecco che le Razor Pages si stanno ritagliano il loro spazio, ed in questa sessione cercheremo di affrontare i pro e contro del loro utilizzo, capendone al meglio i casi duso ideali.
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Codemotion
Codemotion Rome 2015 - Costruiamo con Spring Boot una applicazione Java EE con transazioni multiple JDBC-JMS utilizzando H2 e HornetQ (embedded in memory), il supporto di autoconfiguration JAX-RS (Jersey), le annotazioni JSR 250 per i lifecycle hooks, e le annotazioni JSR 330 utilizzabili per AS proprietari e per la portabilità in container di dependency injection come Spring. Per finire distribuiremo su Undertow embedded HTTTP server, su un AS standalone (Apache TomEE) e come PAAS su Cloud Foundry.
NerdyDog sviluppa applicazioni web in Ruby on Rails, il framework open souce MVC (Model View Controller) basato su Ruby.
Con Ruby on Rails , oppure RoR è possibile sviluppare applicazioni in modo semplice diminuendo la percentuale di codice che solitamente va a ripetersi nelle applicazioni.
Il pattern Model View Controller infatti è una pratica di programmazione che semplifica la separazione tra presentazione dei dati, logica della app e contenuti.
Le app sviluppate in Ruby on Rails sono particolarmente indicate per progetti dinamici, flessibili che necessitano aggiornamenti continui o ampliamenti futuri come possono essere ad esempio le Start up.
http://nerdydog.it/6-sviluppo-applicazioni
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1Alfonso Martino
Questo slide rappresentano un approfondimento su Runtime Fabric - il modello di deployment containerizzato di MuleSoft.
Al loro interno troverete:
- Panoramica su Runtime Fabric
- Setup e configurazione di un cluster su cloud AWS
- Deployment di un'API di test
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Codemotion
Realizzare un’unica piattaforma che garantisce Omni-channel, Zero-downtime, Functional-decomposition e Auto-scaling è possibile? Vi raccontiamo un caso reale di come, utilizzando Zuul, Eureka, SpringBoot, Docker abbiamo realizzato i desideri del cliente e attuato questa trasformazione.
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMCodemotion
"Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM" by Matteo Pagani.
Xamarin è una delle tecnologie più interessanti quando si parla di sviluppo cross-platform, in quanto permette di riutilizzare le proprie conoscenze di C# per realizzare applicazioni con le stesse feature e performance di un'applicazione nativa. Usare Xamarin, però, non significa solamente poter realizzare app Android e iOS in C#, ma anche e soprattutto non dover scrivere e mantenere codebase completamente diverse. In questa sessione vedremo come poter massimizzare il riutilizzo di codice tra le diverse versioni della nostra applicazioni, aiutandoci con il pattern MVVM.
Evoluzione del web development dalle cgi ai microservicesDaniele Mondello
Come si è sviluppato negli ultimi 20 anni lo sviluppo web? Nel Talk tenutosi all'incubatore Arca di Palermo per la masterclass di Angular 4 abbiamo fatto una cavalcata che ci ha portato dalle cgi in Perl ai Microservices
Utilizzando alcuni degli standard web più moderni, Microsoft ha realizzato Blazor: una soluzione che permette ai programmatori .NET di riutilizzare le proprie conoscenze per la realizzazione della user interface delle proprie applicazioni.
Già disponibile per l’uso in produzione con una versione server-side, verrà rilasciata a Maggio una versione client-side basata su WebAssembly, che permetterà lo sviluppo di una Single Page Application in C# eseguita interamente nel browser.
Ma la roadmap non si ferma qui, perchè sono già disponibili le prime versioni sperimentali per l’utilizzo di questa tecnologia anche su Desktop e Mobile!
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
Introduzione al framework Java Spring e Maven per realizzare API REST.
Breve introduzione all'uso di Maven per configurare un progetto SpringBoot e realizzare un server REST.
Disponibile il codice dimostrativo su github (link nelle slide, attenzione alle branch).
Valerio Radice (valix85)
Luglio 2017
In questa serata cercheremo di capire perchè Blazor ha riscosso così tanto successo, e lo faremo analizzando casi presi da applicazioni reali dove questa tecnologia è stata introdotta, così da capirne meglio le potenzialità (ma anche le eventuali criticità).
Come di consuetudine, faremo poi un confronto, così da condividere i vari punti di vista.
Presentazione alla Google Dev Fest Mediterranean 2016 di Catania con presentazione sulle metodologie di utilizzo di microservices e sui sistemi per monitorare le infrastrutture
ASP.NET Core 2.0 è stato ufficialmente rilasciato e porta con se parecchie novità come le Razor Pages, template aggiornati e l'integrazione con Application Insights migliorata. In questa cercheremo capiremo la vera maturità di questo framework, e quanto questo rilascio sia importante per noi dev.
Enterprise Spring and Flex applicationsmarcocasario
SpringSource ha recentemente annunciato Spring BlazeDS Integration, un nuovo progetto open source per permettere una facile integrazione tra il framework Spring e Adobe BlazeDS, una tecnologia open source basata su server Java remoting e Web messaging.
Il plugin di SpringSource fornisce un approccio più semplice ed intuitivo agli sviluppatori Spring e Java per creare Enterprise Rich Internet Applications utilizzando il framework Adobe Flex, una pietra miliare della Flash Platform.
In questa sessione ai partecipanti verrà fornita una panoramica del framework Flex e di BlazeDS, illustrando i vantaggi e le modalità di integrazione al framework Spring attraverso il plugin Spring BlazeDS.
Developing Adobe AIR desktop applicationsmarcocasario
This is the presentation I held at the FromAToWeb 2007 Event. It's about developing desktop applications using Adobe AIR. Adobe AIR is a cross-operating system runtime that allows web application developers to use their existing web development skills (HTML, Javascript, Adobe Flash, Adobe Flex, Ajax) to build and deploy rich Internet applications to the desktop.
In questa sessione faremo una panoramica a 360 gradi su Blazor, la nuovissima tecnologia Microsoft nata da una (geniale :-) idea di Steve Sanderson per lo sviluppo di applicazioni Web client basate su WebAssembly.
Nell'introduzione parlemermo brevemente di WebAssembly, spiegando di cosa si tratta e del perché questa tecnologia abbia tutte le premesse per portare uno dei più grandi "disruptive changes" nel modo di sviluppare applicazioni Web client. Passeremo poi a Blazor esaminandone prima gli aspetti architetturali e procedendo con un behind the scenes per svelare in che modo avviene la "magia" dell'interazione con il browser. Verranno poi presentate le feature che questa tecnologia offre (template project su VS, components, layouts, binding, dependency injection, hosting) sia attraverso slides che, di pari passo, con delle demo di un'applicazione funzionante realizzata in Blazor. Vedremo poi quali sono le problematiche legate a performance, deployment e distribuzione parlando delle possibili future ottimizzazioni. Infine chiuderemo con un confronto tra Blazor e i maggiori framework ora in uso per lo sviluppo di applicazioni Web client (Angular, Vue, Knockout, ecc.) e con alcune considerazioni sull'impatto che Blazor e tecnologie simili potrebbe avere a cascata per lo sviluppo Web futuro, in una sorta di "butterfly effect" nel mondo Web client.
I linguaggi del web - seconda edizione (3° giornata)Diego La Monica
Modulo 4 – AJAX
- Interazioni client/server
- Framework a confronto:
- jQuery
- Mootools
- YUI
- JAST
Modulo 5 – ARIA e l’accessibilità lato client
- Prendere un po' di ARIA
- Le tecnologie assistive
- Ruoli, stati e proprietà
- Strumenti per lo sviluppo accessibile
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformGabriele Gaggi
Cordova è la chiave di volta che consente agli sviluppatori web un ingresso rapido ed indolore negli store delle diverse piattaforme mobili. Vedremo come utilizzare questa chiave di volta sfruttando la potenza e semplicità del framework MVC di Google AngularJs in collaborazione con le caratteristiche responsive offerte dal framework di Twitter Bootstrap.
Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013Massimo Caliman
Introduzione a Google App Engine:Cosa è Google App Engine,Linguaggi di programmazione supportati
L'ambiente di Runtime,Static File Servers
Datastore,Services,Namespaces,Google Accounts, OpenID, e OAuth,Task Queues e Cron Jobs,Developer Tools,Administration Console.
Presentazione sullo stato dell'arte nell'utilizzo e nello sviluppo di Java su Mac OS X effettuata al JUG Milano Meeting #14 del 12 gennaio 2006 presso Mac@Work.
Antonio Russo, Federico Oldrini e Jacopo Giola di Makeitapp hanno presentato il workshop di CommitUniversity, dedicato al Backend as a Service, mostrandoci come costruire con esso un applicazione.
APS 2 comes with new modern and powerful tools built using ADF to model and deploy cloud native process applications, let’s run through what’s in an app with a simple and fun example, ordering beers for your office.
At the origin there was a monolith. Behind a successful startup often lies a single technology application (Java, Rails, etc.) that grows until it hardly scales with the number of customers and likewise its development process as developers increase. A consolidated strategy on the back-end is to progressively slice the monolith into micro-services. A dual solution on the front-end is to gradually extract HTML, CSS and JavaScript code into a Single Page Application, applying some techniques like the ones I've been maturing during my experience in Workshare.
Are we not lucky enough to enjoy a proper software development process in our team? We can try to improve our working environment with a setup on our local machine of a virtualized "software factory in a box" based on opensource tools (Maven/Redmine/Artifactory/Subversion/Jenkins). Following this approach We'll see how we can experiment on ourselves some integration best practices for these tools and easily introduce them into our company later.
Presentazione introduttiva su Groovy e Grails tratta dal materiale della serie di eventi Into The Groovy del JUG Milano tenuta allo Spring Meeting del 26/06/2010 a Cagliari organizzato da JUG Sardegna http://www.jugsardegna.org/vqwiki/jsp/Wiki?26giugno2010
Presentazione "quickie" sull'integrazione fra Maven ed Eclipse offerta dal plugin m2eclipse di Sonatype tenuta al JUG Milano Meeting #29 del 3 luglio 2008: http://www.jugmilano.it/vqwiki/jsp/Wiki?Meeting3Luglio2008&highlight=m2eclipse
Presentazione sull'evoluzione di Struts, primo framework web MVC in ambito Java e sul merger con WebWork, effettuata durante la (prima!) tappa di Torino della prima edizione di JavaDay '06.
OpenOffice.org non è solo la principale suite di applicazioni per l'ufficio completamente libera e basata su open standard (OpenDocument è standard ISO), ma può trasformarsi in una potente piattaforma per applicazioni document-based programmabile via Java.
In questa presentazione esploreremo le potenzialità del connubio fra OpenOffice.org e Java tramite alcuni esempi applicativi. In particolare vedremo la possibilità di eseguire script nei linguaggi basati su JVM come BeanShell e Jython, l'esecuzione remota da applicazioni Java esterne di funzioni di OpenOffice.org lanciato in modalità server, e i diversi punti di aggancio per estendere le funzionalità della suite dall'interno tramite componenti Java custom.
Vedremo infine la nuova applicazione Base presente in OpenOffice.org 2.0 per l'accesso a sorgenti dati JDBC.
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
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
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
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