Introduction to BlazeDS
-
Upload
awerft -
Category
Technology
-
view
875 -
download
2
Transcript of Introduction to BlazeDS
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
Alger Werft. 27. Januar 2009 48
Alternativen - Non Java
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