Introduction of the components of BlazeDS, i.e. Remoting Service, Messaging Service, and HTTP Proxy Service. The different connection types are explained as well. In addition, the factory concept of BlazeDS is mentioned in order to provide info on the integration with Spring and EJB3.
14. Alger Werft. 27. Januar 200914
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
16. Alger Werft. 27. Januar 200916
AMF
Binärformat
Spezifikation ist offen gelegt
Serialisierung im Flash Player durch nativen Code
schnell
17. Alger Werft. 27. Januar 200917
Channel und Endpoints
Channel - Client-seitige Repräsentation der Verbindung
Endpoint - Server-seitige Repräsentation der Verbindung
18. Alger Werft. 27. Januar 200918
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>
23. Alger Werft. 27. Januar 200923
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
24. Alger Werft. 27. Januar 200924
Remoting - Java
Plain Old Java Object (POJO)
package de.cophase.todos
…
public class TodoService {
public List<Todo> getAll() {
…
}
}
25. Alger Werft. 27. Januar 200925
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>
26. Alger Werft. 27. Januar 200926
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>
27. Alger Werft. 27. Januar 200927
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;
}
}
29. Alger Werft. 27. Januar 200929
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
30. Alger Werft. 27. Januar 200930
Topic
Publish-Subscribe Messaging
Message wird an alle registrierten Consumer versendet (Broadcast).
31. Alger Werft. 27. Januar 200931
Queue
Point-To-Point Messaging
Message wird von nur einem Consumer verarbeitet (JMS nötig).
32. Alger Werft. 27. Januar 200932
Message
Eigenschaften
ID
BlazeDS Header
Custom Header
Message Body
Typen
Text Message
Object Message
35. Alger Werft. 27. Januar 200935
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);
}
36. Alger Werft. 27. Januar 200936
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;
}
37. Alger Werft. 27. Januar 200937
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);
38. Alger Werft. 27. Januar 200938
Message Filtering
Nachrichten nur an bestimmte Consumer
Messagefilter anhand Header
Consumer.selector
Subtopics
Consumer.subtopic
Auswahl passiert auf Server
39. Alger Werft. 27. Januar 200939
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"
… />
40. Alger Werft. 27. Januar 200940
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
46. Alger Werft. 27. Januar 200946
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