Introduction to BlazeDS

51
1 Alger Werft. 27. Januar 2009 Einführung in BlazeDS Alger Werft

Transcript of Introduction to BlazeDS

Page 1: Introduction to BlazeDS

1 Alger Werft. 27. Januar 2009

Einführung in BlazeDS

Alger Werft

Page 2: Introduction to BlazeDS

2 Alger Werft. 27. Januar 2009

Beispiel

Todo List

Page 3: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 3

Beispiel: Liste von Todos vom Server anfordern

Page 4: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 4

Beispiel: Todo anlegen

Page 5: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 5

Beispiel: Todo gespeichert

Page 6: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 6

Beispiel: Nachricht mit neuem Todo an andere Clients

Page 7: Introduction to BlazeDS

7 Alger Werft. 27. Januar 2009

Themen Einleitung

Verbindungen

HTTP Proxy Service

Remoting Service

Messaging Service

Factories

Alternativen

Page 8: Introduction to BlazeDS

8 Alger Werft. 27. Januar 2009

Einleitung

Page 9: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 9

Servertechnologien

Page 10: Introduction to BlazeDS

10 Alger Werft. 27. Januar 2009

Web Container? Servlet Container? Application Server?

Page 11: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 11

BlazeDS

Page 12: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 12

Komponenten

Page 13: Introduction to BlazeDS

13 Alger Werft. 27. Januar 2009

WAR?

Page 14: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 14

Installation in Web Application Archive

WEB-INF/lib BlazeDS Jars

WEB-INF/flex services-config.xml

remoting-config.xml

messaging-config.xml

proxy-config.xml

WEB-INF/web.xml HttpFlexSession als Listener

MessageBrokerServlet

Pfad zu services-config.xml in Flex Compileroptionen

Page 15: Introduction to BlazeDS

15 Alger Werft. 27. Januar 2009

Verbindungen

Page 16: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 16

AMF

Binärformat

Spezifikation ist offen gelegt

Serialisierung im Flash Player durch nativen Code

schnell

Page 17: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 17

Channel und Endpoints

Channel - Client-seitige Repräsentation der Verbindung

Endpoint - Server-seitige Repräsentation der Verbindung

Page 18: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 18

Channel und Endpoints - Konfiguration

Konfiguration in services-config.xml

<channels>

<channel-definition id=”my-amf"

type="mx.messaging.channels.AMFChannel">

<endpoint

url="http://servername:8080/todos/messagebroker/amf"

type="flex.messaging.endpoints.AMFEndpoint" />

</channel-definition>

</channels>

Page 19: Introduction to BlazeDS

19 Alger Werft. 27. Januar 2009

HTTP Proxy

Page 20: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 20

HTTP Proxy Service

Page 21: Introduction to BlazeDS

21 Alger Werft. 27. Januar 2009

Remoting

Page 22: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 22

Remoting Service

Page 23: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 23

Remote Procedure Calls mit Flex

Features

Erlaubt Zugriff auf serverseitige Java-Klassen durch Flex Client

Direkter Aufruf der Methoden einer Java-Klasse im Flex Client

Kein Marshalling/Unmarshalling

Bereitstellen von Java Services als Webservice entfällt

Channel

AMFChannel: AMF over HTTP

HTTPChannel: AMFX over HTTP

Page 24: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 24

Remoting - Java

Plain Old Java Object (POJO)

package de.cophase.todos

public class TodoService {

public List<Todo> getAll() {

}

}

Page 25: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 25

Remoting - Konfiguration

In remoting-config.xml

fully-qualified class name des Java-Services als Source

<service id="remoting-service”

class="flex.messaging.services.RemotingService">

<destination id="todoService">

<properties>

<source>de.cophase.todos.TodoService</source>

</properties>

</destination>

</service>

Page 26: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 26

Remoting - Flex

RemoteObject in MXML oder ActionScript

Destination ist ID in remoting-config.xml

method.name ist Name der Methode des Java-Services

<mx:RemoteObject id="todoService" destination="todoService">

<mx:method name="getAll"

result="onGetAllResult(event)"

fault="onGetAllFault(event)" />

</mx:RemoteObject>

Page 27: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 27

Mapping von Java und AS3 Klassen

Metadata tag [RemoteClass(alias=“…”)]

alias = fully-qualified class name der Java-Klasse

Hinweis für AMF Serialisierer

package de.cophase.model.todos {

[Bindable]

[RemoteClass(alias="de.cophase.todos.model.Todo")]

public class Todo {

public var id : int;

public var title : String;

}

}

Page 28: Introduction to BlazeDS

28 Alger Werft. 27. Januar 2009

Messaging

Page 29: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 29

Messaging

Nachrichtenversand zwischen Flex Clients

Server fungiert als zentrale Vermittlungsstelle.

Client-side Messaging API Nachrichten an Service senden (Producer)

Nachrichten von anderen Clients empfangen (Consumer)

Server-push Messaging

Verbindung zu Java Messaging Service (JMS) Provider möglich

Page 30: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 30

Topic

Publish-Subscribe Messaging

Message wird an alle registrierten Consumer versendet (Broadcast).

Page 31: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 31

Queue

Point-To-Point Messaging

Message wird von nur einem Consumer verarbeitet (JMS nötig).

Page 32: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 32

Message

Eigenschaften

ID

BlazeDS Header

Custom Header

Message Body

Typen

Text Message

Object Message

Page 33: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 33

Messaging Service

Page 34: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 34

Messaging - Konfiguration

In messaging-config.xml

<service id="message-service"

class="flex.messaging.services.MessageService">

<destination id="todoTopic">

<properties>

<jms>

<destination-type>Topic</destination-type>

<message-type>javax.jms.ObjectMessage</message-type>

</jms>

</properties>

</destination>

</service>

Page 35: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 35

Producer

Nachrichtensender

Destination ist ID in messaging-config.xml

<mx:Producer id="producer" destination="todoTopic"

acknowledge="onAcknowledge(event)" fault="onFault(event)"/>

private function sendMessage(text : String) : void

{

var message : IMessage = new AsyncMessage();

message.body = text;

producer.send(message);

}

Page 36: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 36

Consumer

Nachrichtenempfänger

<mx:Consumer id="consumer" destination="todoTopic"

message="onMessage(event)" />

consumer.subscribe(); // z.B. in creationComplete()

private function onMessage(event : MessageEvent) : void

{

var message : IMessage = event.message;

var body : Object = message.body;

}

Page 37: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 37

Producer - Java

Nachrichten von Java aus an Destination senden

MessageBroker msgBroker =

MessageBroker.getMessageBroker(null);

AsyncMessage msg = new AsyncMessage();

msg.setDestination("todos");

msg.setClientId(clientID);

msg.setMessageId(UUIDUtils.createUUID());

msg.setTimestamp(System.currentTimeMillis());

msg.setBody(todo);

msgBroker.routeMessageToService(msg, null);

Page 38: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 38

Message Filtering

Nachrichten nur an bestimmte Consumer

Messagefilter anhand Header

Consumer.selector

Subtopics

Consumer.subtopic

Auswahl passiert auf Server

Page 39: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 39

Message Filtering - Beispiel

Nachricht senden

var message:AsyncMessage = new AsyncMessage();

message.headers = new Array();

message.headers["groupID"] = 3;

message.body = input.text;

producer.send(message);

Nachricht empfangen

<mx:Consumer id="todoConsumer"

destination="todoTopic"

selector="groupID = 3"

… />

Page 40: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 40

Messaging Adapter

ActionScriptAdapter

Nur Flex Clients als Consumer/Producer

JMSAdapter

Nachrichtenversand/-empfang auch durch Server und andere Clients JBossMQ

ActiveMQ

Unterstützt auch Queues

Custom Adapter

Anbindung an andere Messaging Infrastrukturen

Page 41: Introduction to BlazeDS

41 Alger Werft. 27. Januar 2009

Factories

Page 42: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 42

Spring

Spring Factory

<factories>

<factory id="spring"

class="com.adobe.flex.factory.SpringFactory" />

</factories>

<destination id="todoService">

<properties>

<factory>spring</factory>

<source>todoManager</source>

</properties>

</destination>

Page 43: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 43

EJB3

JNDI Lookup

EJB Factory auf Flex Exchange

<factories>

<factory id="ejb3" class="com.adobe.ac.ejb.EJB3Factory">

</factories>

<destination id=”todoList">

<properties>

<factory>ejb3</factory>

<source>appname/TodoList/local</source>

</properties>

</destination>

Page 44: Introduction to BlazeDS

44 Alger Werft. 27. Januar 2009

Code?

Page 45: Introduction to BlazeDS

45 Alger Werft. 27. Januar 2009

Alternativen

Page 46: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 46

LCDS

Zusätzliche Features von Live Cycle Data Service

Data Management Data Synchronization

Conflict Resolution

Smart Paging

Service Adapter Hibernate

SQL

Offline Caching

PDF Generierung

Page 47: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 47

Alternativen - Java

Hessian

GraniteDS

Exadel Flamingo

Page 49: Introduction to BlazeDS

49 Alger Werft. 27. Januar 2009

Links

Page 50: Introduction to BlazeDS

Alger Werft. 27. Januar 2009 50

Links

http://opensource.adobe.com/wiki/display/blazeds/BlazeDS

http://coenraets.org/blog/

http://www.jamesward.com/census/

http://java.sun.com/products/jms/

http://hessian.caucho.com

http://www.graniteds.org

http://www.exadel.com/flamingo

Page 51: Introduction to BlazeDS

51 Alger Werft. 27. Januar 2009

Danke!

www.cophase.de

[email protected]