RIAs with Java, Spring,
Hibernate, BlazeDS, and
Flex
James Ward
www.jamesward.com
Technical Evangelist - Adobe
#6662
Applications have evolved
Easy
2004
WEB APPLICATIONS
EASE OF DEPLOYMENT
RICH INTERNET
1998 APPLICATIONS
1992
Hard
MAINFRAME CLIENT/ SERVER
Client
Limited Capability Full
Adobe’s Software Development Platform
Applications
Adobe
Media
Open Bug Database: Acrobat
Buzzword Connect
Player http:/ / bugs.adobe.com
Designer/ Developer Tools Clients
Client
Runtimes Adobe Flash PDF
AIR Player
60 Day Free Trial
Free for students Frameworks
High Performance
Adobe
and Creative
educators
Suite 4 JIT’ing VM: Ajax Flex 3
Mozilla Tamarin
Servers/ Services
Open Source: MPL
Flex Builder
LiveCycle ColdFusion
Use any
Flash Mediatext editor
Acrobat Flash / IDE
Scene7
Server Connect Cast
Adobe AIR Application Stack
HTML Flash
Cross- OS
HTML Flex Application
JavaScript Flash ActionScript HTML Integrated
XML XML Rendering
CSS Audio
Integrated DOMs
PDF Video PDF
& Scripting
File Syst em Network Applicat ion Drag and Local
Access Detect ion
Not ifications
Update Drop Database
... Adobe AIR APIs
Mac, Windows, Linux & Device OS
How Flex Works
Flex Builder IDE Browser Adobe AIR
MXML and ActionScript
Flash Player
Flex SDK
MXML ActionScript
Flex Class Library
SOAP HTTP/ S AMF/ S RTMP/ S
Web Server
Compile
XML/ HTTP BlazeDS or
REST LC Data Services
SOAP Web Services
J2EE Application Server
.swf
Ex isting Applications and Infrastructure
Tour de Flex - flex.org/ tour
Flex with Java via XML (RESTful / SOAP)
App Server
Web Service
XML
Client (RESTful /
SOAP)
Introducing Open Source BlazeDS
BlazeDS
Service
Data Management
BlazeDS is the remoting and HTTP- based Adapters
Data Synchronization
messaging technology which Adobe is LiveCycle
Off- line Applications
contributing to the community under LGPL
Data Paging SQL
v3
Capabilities RPC Services Hibernate
> Easily connects Flex & AIR applications to existing Web Service
server logic HTTP Service ColdFusion
> High performance data transfer for more responsive Rem ote Object Service
applications JMS
Messaging
> Real- time data push over standard HTTP Java
Publish & Subscribe
> Full pub/ sub messaging that ex tends existing Collaboration
messaging infrastructure Real Tim e Data Push
Custom…
Publication of the Action Message Format Prox y Service
(AMF3) binary data protocol specification Web- tier Compiler
Portal Deployment
Certified builds, warranty protection and
RIA- PDF Generation
enterprise support subscriptions available
http:/ / www.jamesward.com/ census/
Flex with Java via Remoting
J2EE Server
BlazeDS
POJO
Endpoint Spring Bean
AMF
Client
EJB
Other
Flex with Java via Messaging
J2EE Server
BlazeDS
Messaging
Adapter X
System X
Message JMS
Endpoint JMS Adapt er
Service Provider
Messaging
Adapter Y
System Y
RTMP
AMF
HTTP Publisher
Subscriber
Spring and Flex!
SpringSource and Adobe have formed a joint partnership to turn this idea into
reality!
The foundations of this new integration will be available as open source
– A new Spring subproject in the web portfolio:
Spring BlazeDS Integration
Focus on integrating the open source BlazeDS with Spring
12
M1 - Dec 2 0 0 8
Bootstrap the BlazeDS MessageBroker as a Spring- managed bean (no more
web.xml MessageBrokerServlet config needed)
Route http- based Flex messages to the MessageBroker through the Spring
DispatcherServlet
Expose Spring beans for remoting using typical Spring remoting exporter
configuration
13
M2 - March 2 0 0 8
Spring Security integration
– Ensure that Spring security can secure any Springmanaged
endpoints with credentials provided by the Flex app
14
post M2
Spring JMS integration
– Integration with the BlazeDS MessageService
– Use Spring configuration to manage BlazeDS
MessageDestinations
– Let Spring manage the JMS details
– Allows easy communication from Flex clients to Spring
message- driven POJOs
Spring 3.0 REST integration
– Provides support for multiple client- types
– Flex apps can already consume Spring 3.0 RESTful endpoints through
HTTPService
– Additional value could be realized by providing an AMFView
implementation
Response for H TTP requests w ith a ContentType= application/actionscript
web.xml
< listener>
< listener-
class> org.springframework.web.contex t.Contex tLoaderListener< / listener- class>
< / listener>
< servlet>
< servlet- name> testdrive< / servlet- name>
< servlet-
class> org.springframework.web.servlet.DispatcherServlet< / servlet- class>
< load- on- startup> 1< / load- on- startup>
< / servlet>
< servlet- mapping>
< servlet- name> testdrive< / servlet- name>
< url- pattern> / messagebroker/ *< / url- pattern>
< / servlet- mapping>
web.xml - Security Config
< contex t- param>
< param- name> contextConfigLocation< / param- name>
< param- value>
/ WEB- INF/ config/ web- application- config.x ml
/ WEB- INF/ config/ web- application- security.x ml
< / param- value>
< / contex t- param>
< filter>
< filter- name> springSecurityFilterChain< / filter- name>
< filter- class> org.springframework.web.filter.DelegatingFilterProx y< / filter- class>
< / filter>
< filter- mapping>
< filter- name> springSecurityFilterChain< / filter- name>
< url- pattern> / *< / url- pattern>
< / filter- mapping>
web- application- config.xml
< beans xmlns= "http:/ / www.springframework.org/ schema/ beans"
xmlns:flex = "http:/ / www.springframework.org/ schema/ flex"
xmlns:security= "http:/ / www.springframework.org/ schema/ security"
xmlns:x si= "http:/ / www.w3.org/ 2001/ XMLSchema- instance"
xsi:schemaLocation= "
http:/ / www.springframework.org/ schema/ beans
http:/ / www.springframework.org/ schema/ beans/ spring- beans- 2.5.xsd
http:/ / www.springframework.org/ schema/ flex
http:/ / www.springframework.org/ schema/ flex/ spring- flex- 1.0.xsd
http:/ / www.springframework.org/ schema/ security
http:/ / www.springframework.org/ schema/ security/ spring- security- 2.0.4.xsd">
< flex :message- broker>
< flex:secured / >
< / flex :message- broker>
web- application- config.xml - Remoting
Beans < !- - Ex pose the productDAO bean for BlazeDS remoting - - >
< flex:remote- service ref= "productService" / >
< !- - A secured version of productService - - >
< bean id= "securedProductService" class= "flex .spring.samples.product.ProductDAO" >
< flex:remote- service/ >
< constructor- arg ref= "dataSource"/ >
< security:intercept- methods>
< security:protect method= "find*" access= "ROLE_USER" / >
< / security:intercept- methods>
< / bean>
20
Hibernate Integration
Either wrap beans by remoting Spring services / EJB Session Beans /
POJOs...
public class Employee
public class EmployeeService
Or use dpHibernate
Or use LCDS’s Data Management Service
21
EJB Entity Beans and Session Beans
The End
Questions?
Learn More:
> Tour de Flex - flex .org/ tour
> www.jamesward.com