Introduction to BlazeDS

Preview:

Citation preview

1 Alger Werft. 27. Januar 2009

Einführung in BlazeDS

Alger Werft

2 Alger Werft. 27. Januar 2009

Beispiel

Todo List

Alger Werft. 27. Januar 2009 3

Beispiel: Liste von Todos vom Server anfordern

Alger Werft. 27. Januar 2009 4

Beispiel: Todo anlegen

Alger Werft. 27. Januar 2009 5

Beispiel: Todo gespeichert

Alger Werft. 27. Januar 2009 6

Beispiel: Nachricht mit neuem Todo an andere Clients

7 Alger Werft. 27. Januar 2009

Themen Einleitung

Verbindungen

HTTP Proxy Service

Remoting Service

Messaging Service

Factories

Alternativen

8 Alger Werft. 27. Januar 2009

Einleitung

Alger Werft. 27. Januar 2009 9

Servertechnologien

10 Alger Werft. 27. Januar 2009

Web Container? Servlet Container? Application Server?

Alger Werft. 27. Januar 2009 11

BlazeDS

Alger Werft. 27. Januar 2009 12

Komponenten

13 Alger Werft. 27. Januar 2009

WAR?

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

15 Alger Werft. 27. Januar 2009

Verbindungen

Alger Werft. 27. Januar 2009 16

AMF

Binärformat

Spezifikation ist offen gelegt

Serialisierung im Flash Player durch nativen Code

schnell

Alger Werft. 27. Januar 2009 17

Channel und Endpoints

Channel - Client-seitige Repräsentation der Verbindung

Endpoint - Server-seitige Repräsentation der Verbindung

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>

19 Alger Werft. 27. Januar 2009

HTTP Proxy

Alger Werft. 27. Januar 2009 20

HTTP Proxy Service

21 Alger Werft. 27. Januar 2009

Remoting

Alger Werft. 27. Januar 2009 22

Remoting Service

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

Alger Werft. 27. Januar 2009 24

Remoting - Java

Plain Old Java Object (POJO)

package de.cophase.todos

public class TodoService {

public List<Todo> getAll() {

}

}

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>

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>

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;

}

}

28 Alger Werft. 27. Januar 2009

Messaging

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

Alger Werft. 27. Januar 2009 30

Topic

Publish-Subscribe Messaging

Message wird an alle registrierten Consumer versendet (Broadcast).

Alger Werft. 27. Januar 2009 31

Queue

Point-To-Point Messaging

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

Alger Werft. 27. Januar 2009 32

Message

Eigenschaften

ID

BlazeDS Header

Custom Header

Message Body

Typen

Text Message

Object Message

Alger Werft. 27. Januar 2009 33

Messaging Service

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>

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

}

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;

}

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

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

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"

… />

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

41 Alger Werft. 27. Januar 2009

Factories

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>

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>

44 Alger Werft. 27. Januar 2009

Code?

45 Alger Werft. 27. Januar 2009

Alternativen

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

Alger Werft. 27. Januar 2009 47

Alternativen - Java

Hessian

GraniteDS

Exadel Flamingo

49 Alger Werft. 27. Januar 2009

Links

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

51 Alger Werft. 27. Januar 2009

Danke!

www.cophase.de

alger@cophase.de

Recommended