Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introduction to BlazeDS

1,127 views

Published on

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.

Published in: Technology
  • Be the first to comment

Introduction to BlazeDS

  1. 1. 1 Alger Werft. 27. Januar 2009 Einführung in BlazeDS Alger Werft
  2. 2. 2 Alger Werft. 27. Januar 2009 Beispiel Todo List
  3. 3. Alger Werft. 27. Januar 20093 Beispiel: Liste von Todos vom Server anfordern
  4. 4. Alger Werft. 27. Januar 20094 Beispiel: Todo anlegen
  5. 5. Alger Werft. 27. Januar 20095 Beispiel: Todo gespeichert
  6. 6. Alger Werft. 27. Januar 20096 Beispiel: Nachricht mit neuem Todo an andere Clients
  7. 7. 7 Alger Werft. 27. Januar 2009 Themen Einleitung Verbindungen HTTP Proxy Service Remoting Service Messaging Service Factories Alternativen
  8. 8. 8 Alger Werft. 27. Januar 2009 Einleitung
  9. 9. Alger Werft. 27. Januar 20099 Servertechnologien
  10. 10. 10 Alger Werft. 27. Januar 2009 Web Container? Servlet Container? Application Server?
  11. 11. Alger Werft. 27. Januar 200911 BlazeDS
  12. 12. Alger Werft. 27. Januar 200912 Komponenten
  13. 13. 13 Alger Werft. 27. Januar 2009 WAR?
  14. 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
  15. 15. 15 Alger Werft. 27. Januar 2009 Verbindungen
  16. 16. Alger Werft. 27. Januar 200916 AMF Binärformat Spezifikation ist offen gelegt Serialisierung im Flash Player durch nativen Code schnell
  17. 17. Alger Werft. 27. Januar 200917 Channel und Endpoints Channel - Client-seitige Repräsentation der Verbindung Endpoint - Server-seitige Repräsentation der Verbindung
  18. 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>
  19. 19. 19 Alger Werft. 27. Januar 2009 HTTP Proxy
  20. 20. Alger Werft. 27. Januar 200920 HTTP Proxy Service
  21. 21. 21 Alger Werft. 27. Januar 2009 Remoting
  22. 22. Alger Werft. 27. Januar 200922 Remoting Service
  23. 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. 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. 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. 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. 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; } }
  28. 28. 28 Alger Werft. 27. Januar 2009 Messaging
  29. 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. 30. Alger Werft. 27. Januar 200930 Topic Publish-Subscribe Messaging Message wird an alle registrierten Consumer versendet (Broadcast).
  31. 31. Alger Werft. 27. Januar 200931 Queue Point-To-Point Messaging Message wird von nur einem Consumer verarbeitet (JMS nötig).
  32. 32. Alger Werft. 27. Januar 200932 Message Eigenschaften ID BlazeDS Header Custom Header Message Body Typen Text Message Object Message
  33. 33. Alger Werft. 27. Januar 200933 Messaging Service
  34. 34. Alger Werft. 27. Januar 200934 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>
  35. 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. 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. 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. 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. 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. 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
  41. 41. 41 Alger Werft. 27. Januar 2009 Factories
  42. 42. Alger Werft. 27. Januar 200942 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>
  43. 43. Alger Werft. 27. Januar 200943 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. 44. 44 Alger Werft. 27. Januar 2009 Code?
  45. 45. 45 Alger Werft. 27. Januar 2009 Alternativen
  46. 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
  47. 47. Alger Werft. 27. Januar 200947 Alternativen - Java Hessian GraniteDS Exadel Flamingo
  48. 48. Alger Werft. 27. Januar 200948 Alternativen - Non Java
  49. 49. 49 Alger Werft. 27. Januar 2009 Links
  50. 50. Alger Werft. 27. Januar 200950 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. 51. 51 Alger Werft. 27. Januar 2009 Danke! www.cophase.de alger@cophase.de

×