20
Integration of Spring with Blaze DS and Cairngorm UM Deepdive by N.S.Devaraj

Spring Cairngorm

Embed Size (px)

Citation preview

Page 1: Spring Cairngorm

Integration of Spring with Blaze DS and Cairngorm UM

Deepdive by N.S.Devaraj

Page 2: Spring Cairngorm

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?

Page 3: Spring Cairngorm

`

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.

Page 4: Spring Cairngorm

WHAT IS SPRING?

The Spring framework includes several other modules in addition to its core IoC

container. http://www.springframework.org.

Page 5: Spring Cairngorm

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.

Page 6: Spring Cairngorm

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.

Page 7: Spring Cairngorm

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.

Page 8: Spring Cairngorm

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

Page 9: Spring Cairngorm

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:

Page 10: Spring Cairngorm

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>

Page 11: Spring Cairngorm

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>

Page 12: Spring Cairngorm

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);

Page 13: Spring Cairngorm
Page 14: Spring Cairngorm

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)

Page 15: Spring Cairngorm

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

Page 16: Spring Cairngorm

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

Page 17: Spring Cairngorm

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.

Page 18: Spring Cairngorm

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

Page 19: Spring Cairngorm

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

Page 20: Spring Cairngorm

QUESTIONS