Upload
devaraj-ns
View
324
Download
8
Tags:
Embed Size (px)
Citation preview
Integration of Spring with Blaze DS and Cairngorm UM Deepdive by N.S.Devaraj http://nsdevaraj.wordpress.com/twitter : @nsdevaraj
Agenda for this season What is Spring? Why Spring with Flex? Why Spring BlazeDS Integration? What is & Why Cairngorm UM? What is & why generic DAO? What is & Why CairnSpring?
`
WHAT IS SPRING?
The result is looser coupling between components. The Spring IoC container has
proven to be a solid foundation for building robust enterprise applications.
The components managed by the Spring IoC container are called Spring beans.
WHAT IS SPRING?
The Spring framework includes several other modules in addition to its core IoC
container. http://www.springframework.org.
WHY WE NEED FLEX ACCESS SPRING?
Flex is the obvious choice when a SpringDeveloper is looking at RIA.
Can reuse your server-side Spring to moveinto RIA.
WHY WE NEED FLEX ACCESS SPRING?
In scenario of the Remoting and Data Management Services approaches:
It enable the tightest integration with Spring. There is no need to transform
data, or to expose services in a certain way: the Flex application works directly
with the beans registered in the Spring IoC container.
WHY WE NEED FLEX ACCESS SPRING?
The BlazeDS Remoting enables binding your valueobjects with Java pojo Classes easily
by metadata [RemoteClass(alias=”com.adobe.pojo.ob”]
By using the Spring Security 2.0 we can make our application secured for
transactions.
Browser or AIR .swf
application
ServiceProxy
RemoteProcedure
CallsMessaging
domain http(s)
blazeds server
External Services
WHAT is BlazeDS?BlazeDS provides a set of services that lets you connect
a client-side application to server-side data, and pass data among multiple clients connected to the server. BlazeDS implements real-time messaging between
clients.
domain
/{context}/messagebroker/*servlet
.classconfig
.jarlibrary.jar
library
proxy-config.xmlconfig
messaging-config.xmlconfig
remote-config.xmlconfig
services-config.xmlconfig
core
flex
LibClasses
BlazeDS Server
BLAZE DS WAY Using the “dependency lookup” approach of the SpringFactory feels opposite to the "Spring Way" The burden of configuration is multiplied. Potential for deep integration beyond just remoting is limited.
Bootstrap the BlazeDS MessageBroker as a Spring-managed bean (no more web.xml or MessageBrokerServlet config needed). Route http-based Flex messages to theMessageBroker through the Spring DispatcherServlet. Expose Spring beans for remoting by namespace
BLAZEDS SPRING INTEGRATION
TRADITIONAL BLAZE DS WAY
The BlazeDS configuration first imports the 'remoting-config.xml',The parameters in the URL 'server.name' and 'server.port' are supplied by the Flex runtime. The 'context.root' parameter needs to be supplied during compilation using the 'context-root' compiler option.services-config.xml
<?xml version="1.0" encoding="UTF-8"?><services-config> <services> <service-include file-path="remoting-config.xml" /> <default-channels> <channel ref="person-amf"/> </default-channels> </services> <channels> <channel-definition id="person-amf" class="mx.messaging.channels.AMFChannel"> <endpoint url="http://{server.name}:{server.port}/{context.root}/spring/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/> </channel-definition> </channels> </services-config>
SPRING BLAZEDS INTEGRATIONWEB.XML
Spring BlazeDS Integration servlet
<servlet>
<servlet-name>spring-flex</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/flex-servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Mapping Spring BlazeDS Integration servlet to handle all requests to '/spring/*
<servlet-mapping>
<servlet-name>spring-flex</servlet-name>
<url-pattern>/spring/*</url-pattern>
</servlet-mapping>
Example:
SPRING BLAZE DS EXAMPLE
flex-servlet-context.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:flex="http://www.springframework.org/schema/flex" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/flexhttp://www.springframework.org/schema/flex/spring-flex-1.0.xsd">
<context:component-scan base-package="org.springbyexample.web.service" />
<flex:message-broker/> ----Spring BlazeDS Integration configuration of the BlazeDS message broker, which handles remoting and messaging requests.
<flex:remoting-destination ref="personDao" /> ---Exposes the personDao bean as a BlazeDS remoting destination
</beans>
SPRING BLAZEDS INTEGRATION PersonService.java
@Service@RemotingDestinationpublic class PersonService { private final PersonDao personDao; /** * Constructor */ @Autowired public PersonService(PersonDao personDao) { this.personDao = personDao; } public void remove(int id) { Person person = personDao.findPersonById(id); personDao.delete(person); }}
PersonDeleteCommand.as var ro:RemoteObject = new RemoteObject("personDao"); ro.remove(id); ro.addEventListener(ResultEvent.RESULT, updateSearch);
Cairngorm with UM Extensions Universal Mind Cairngorm Extensions
( UM – CGX is easy to migrate from CG) Event – Business logic combined together Command logic can be aggregated to
context-specific command classes (minimizes the number of classes)
Support for easy queue of delegate calls (SequenceGenerator)
Cairngorm with UM Extensions Create Responder in view Add responder to event Cache/Store responder from event to
command In Command, on success/failure call back
these responders On view handle success/failure to control
view states
Cairngorm with UM ExtensionsView Layer Model Layer Control Layer
View
ModelLocator
Command Delegate Servervia databinding
via IRespondertcp/ip
View Layer Business Layer
View Command Delegate Server
via IResponder via IRespondertcp/ip
via eventdispatching
via eventdispatching
MVC Classic Usage
Using View Notifications
MVC Classic Usage
J2EE – DAO INTRODUCTION All database access in the system is made
through a DAO to achieve encapsulation. Each DAO instance is responsible for one
primary domain object or entity. If a domain object has an independent lifecycle, it should have its own DAO.
The DAO is responsible for creations, reads (by primary key), updates, and deletions -- that is, CRUD -- on the domain object.
generic DAO For creating a new DAO we need →a Hibernate mapping file, a plain old Java interface, and 10 lines in your Spring configuration
file.
Resource:http://www.ibm.com/developerworks/java/library/j-
genericdao.html
CairnSpring
The CairnSpring includes both Caringorm UM, Generic DAO along with the Spring BlazeDS
Integration.
It also enables Paging request.
http://www.code.google.com/p/cairnspring
Cha
nnel
s
BlazeDS
Long Polling
NIO Streaming
RTMPNIO Polling
PollingAMF
HTTP
Messaging
NIO LongPolling
Streaming
Producer ConsumerRemoteObject Dataservice
Remoting Data Mgmt
Piggyback
®
Copyright 2008 Adobe Systems Incorporated. All rights reserved.
Ser
vice
sA
dapt
ers
MessagingProxy
Remoting Data Mgmt
Change Tracking
Data Sync
RPC
AMF
Pub/Sub
Real Time Push PDF
Security
Hibernate ColdFusionSQL
SpringWSRP
JMS Java
QUESTIONS