Flex Builder 3 Débutant ? Découvrez Flex et Adobe® Flex® Builder 3
16
nov
09

Flex BlazeDS – Tutorial Application Java Messaging avec BlazeDS Turnkey

Ce tutorial Adobe Flex avec BlazeDS va vous expliquer comment monter une application Java en liaison avec une application Flex. On va ici utiliser le service Messaging de BlazeDS pour la communication. Afin de faciliter l'explication, on va utiliser la version "Turnkey" de BlazeDS qui est directement livrée avec un serveur d'application Tomcat. Si vous n'avez pas encore installé BlazeDS Turnkey, suivez ces instructions:

Flex BlazeDS – Configurer son environnement BlazeDS avec Turnkey

BlazeDS offre un service de messaging qui permet aux applications Flex de publier des messages et de s'inscrire à un ensemble de destinations, permettant le développement d'application temps réel et / ou collaboratives comme des chats par exemple.

Création du projet Java

Vous allez avoir besoin d'un projet Java pour la partie serveur de l'application. Tout d'abord, ouvrez Eclipse et créez un nouveau projet Java:

  • Dans le menu d'Eclipse, choisissez File > New > Project
  • Dans l'arbre, choisissez Java Project comme type de projet puis Next
  • Sur la page "Create a Java Project":
    • Entrez "blazeds-server" comme nom de projet
    • Sélectionnez "Create project from existing source", et entrez le chemin vers la webapp "sample" comme par exemple "C:\blazeds\tomcat\webapps\samples\WEB-INF"
    • Next
  • Sur la  page "Java Settings", assurez-vous que le Default output folder soit à "blazeds-server/WEB-INF/classes" puis Finish

Cette configuration de projet vous permet de conserver le code source de vos classes Java dans le dossier WEB-INF/src. Ces classes seront automatiquement compilées dans le dossier WEB-INF/classes.

Création du channel de destination (messaging-config.xml)

Ce que l'on appelle une "Messaging Destination" dans le jargon BlazeDS représente un sujet de conversation en temps réel dont les clients peuvent s'inscrire (écoute) ou contribuer en envoyant leur propres messages.

Pour définir une simple destination de chat pour cette application:

  • Dans votre projet "blazeds-server", ouvrez le fichier "messaging-config.xml" situé dans /WEB-INF/flex/.
  • Ajoutez une destination appelée "tutorial-chat" définie comme ceci:
<destination id="tutorial-chat"/>
  • Redémarrez le serveur application Tomcat (voir manipulation dans le tutorial plus haut)

Le canal de destination est un élément-clé qui va permettre d'échanger de la donnée entre le client et le serveur. En utilisant BlazeDS, une destination utilise typiquement soit un canal de type "streaming", soit un canal de type "polling".

  • Quand on utilise un canal de type "streaming", le serveur reste ouvert jusqu'à ce que le canal de connexion soit fermé, permettant au serveur d'envoyer des bouts de données au client. Puisque les connexions HTTP ne sont pas "duplex", un seul canal AMF ou HTTP requiert en fait deux connexions HTTP pour envoyer de la donnée dans les deux directions. Une est nécessaire pour la réponse streaming du serveur. L'autre est une connexion transitoire, seulement nécessaire quand de la donnée est envoyée vers le serveur.
  • Un canal de type "polling" peut être configuré avec un intervalle de "polling", ou il peut être configuré pour attendre qu'une donnée serveur soit disponible (ce qu'on appelle le "long-polling").

Notez qu'il n'y a pas besoin de définir un type de canal pour la destination "tutorial-chat". Quand vous ne spécifiez pas de canal pour une destination, la destination utilise le canal par défaut définit au début du fichier "messaging-config.xml". Dans notre cas, le client va d'abord essayer de se connecter au service de Messaging en utilisant le canal "my-streaming-amf". Si une connexion au serveur ne peux être établie, le client va utiliser le canal "my-polling-amg". Les canaux peuvent être configurés dans le fichiers services-config.xml.

Création de l'application Flex

Pour créer la partie client, rendez-vous dans Flex Builder (ou restez dans Eclipse si vous l'avez installé en plug-in).

  • Créez un nouveau Flex Project nommé "MessagingClient"
  • Sélectionnez Web Application comme Application Type
  • Sélectionnez J2EE comme Application Server Type
  • Dans l'écran suivant, décochez "Use default location for local LiveCycle Data Services server" et entrez:
  • "C:\blazeds\tomcat\webapps\samples" comme Root folder (à modifier si vous avec placé votre BlazeDS ailleurs
  • "http://localhost:8400/samples" comme Root URL
  • "/samples" comme Context Root

remoting-3

Ouvrez le fichier MessagingClient.mxml et entrez:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                creationComplete="consumer.subscribe()">

  <mx:Script>
    <![CDATA[
      import mx.messaging.events.MessageFaultEvent;
      import mx.rpc.events.FaultEvent;import mx.messaging.events.MessageEvent;
      import mx.messaging.messages.AsyncMessage;

      private function send():void
      {
        var message:AsyncMessage = new AsyncMessage();
        message.body.chatMessage = msg.text;
        producer.send(message);
        msg.text = "";
      }

      private function messageHandler(event:MessageEvent):void
      {
        log.text += event.message.body.chatMessage + "\n";
      }

      private function faultHandler(event:MessageFaultEvent):void {
        msg.text += "Received fault: " + event.faultDetail + "\n";
      }

    ]]>
  </mx:Script>

  <mx:Producer id="producer" destination="tutorial-chat" fault="faultHandler(event)"/>
  <mx:Consumer id="consumer" destination="tutorial-chat" message="messageHandler(event)" fault="faultHandler(event)"/>

  <mx:Panel title="Chat" width="100%" height="100%">
    <mx:TextArea id="log" width="100%" height="100%"/>
    <mx:ControlBar>
      <mx:TextInput id="msg" width="100%" enter="send()"/>
      <mx:Button label="Send" click="send()"/>
    </mx:ControlBar>
  </mx:Panel>
</mx:Application>

Quelques précisions sur le code Adobe Flex

  • Du côté client, l'API de Messaging de BlazeDS fournit deux classes: Producer et Consumer, qui vous permettent de publier et de s'inscrire à une destination, respectivement.
  • Pour souscrire à une destination, utilisez la méthode subscribe() de la classe Consumer
  • Quand un message est publié à une destination à laquelle vous êtes inscrite, l'évènement de Messaging est déclenché vers le Consumer.

Dans cet exemple, les messages sont publiés par les clients Flex. Le service de Messaging offre aussi une API Java qui permet aux composants serveur de publier des messages à une destination BlazeDS. Une autre option pour l'échange des messages entre Flex et les application Java est l'utilisation des topics Java Message Service.

Utilisation de l'application exemple

Pour utiliser cette application, ouvrez la dans plusieurs navigateurs et envoyez des messages. Vous verrez le message apparaître dans toutes les applications ouvertes.



Autres Tutoriaux Flex liés:

9 Réponses à “Flex BlazeDS – Tutorial Application Java Messaging avec BlazeDS Turnkey”


  1. 1 frangy nov 16th, 2009 at 16:03

    Bonjour,

    Vous avez postez une série de tutoriels sur AFCS, qui sont vraiment très bien expliqués et intuitifs.
    Et donc en voyant cette autre méthode permettant de faire à peut prêt la même chose, une question me trotte dans la tête…

    Quels sont les points forts et les points faibles de chacune ?

    J'imagine bien que pour faire dialoguer flex et une application java, cette méthode est la plus adéquate. Mais si l'on doit mettre en place un chat ou une application collaborative comme vous nous en avez présentés lors des tutoriels AFCS ?

    Peut être avez vous déjà eu des impressions ou des retours sur l'exploitation de l'une ou l'autre de ces techniques ?

  2. 2 fnicollet nov 16th, 2009 at 20:26

    Bonjour,
    BlazeDS permet d'avoir vraiment la main sur son application et sa structure serveur. AFCS permet quand à lui de s'affranchir du développement serveur grâce à des composants tout prêts. Pour moi c'est la grande différence. Si vous devez développez une application de chat avec BlazeDS, vous devrez gérer par vous-même les concepts de "room", de droits utilisateurs par exemple alors qu'AFCS le propose de base. De même, vu que les serveurs AFCS sont chez Adobe, vous n'avez pas à vous pré-occuper de la structure niveau "matériel" ni de l'augmentation des ressources nécessaires. Par contre, vous devez être connecté à internet et vous restez dépendant du service d'Adobe.
    Pour moi, c'est la meilleure solution pour créer un chat fiable rapidement. Après se pose la question du prix qui n'est pas encore (enfin la dernière fois que j'ai vérifié) fixé même si de bonnes idées émergent.

    Voila :)

    Fabien

  3. 3 frangy nov 17th, 2009 at 9:37

    Merci beaucoup pour cette réponse !

    D'ailleurs à ce sujet (même si je m'éloigne un peu du sujet principal ^^ ), qu'elles sont "ces idées" au niveau du coût qui émergent ?

    A t-on déjà une fourchette de prix sur ce que couterait une application utilisant AFCS utilisée par une centaine de personne par exemple ?

  4. 4 fnicollet nov 17th, 2009 at 9:47

    Salut,
    je viens de vérifier et il y a pas mal de changement ! Le blog officiel se trouve à cette adresse:
    http://blogs.adobe.com/collabmethods/
    Apparement, Cocomo, alias AFCS est devenu Livecycle Collaboartion Service (encore un changement de nom :P ).
    Pour plus d'informations sur le pricing, voilà la FAQ:
    http://forums.adobe.com/message/2292267#2292267

    Fabien
    PS: Je ne travaille pas chez Adobe, je n'ai donc pas accès à plus d'informations que n'importe qui :)

  5. 5 frangy nov 17th, 2009 at 10:09

    je pense bien que tu ne travail pas chez Adobe ^^, même si j'ai eu un doute par un moment tellement tu es réactif sur l'actualité Flex :p

    Merci beaucoup pour toutes ces informations :D

  6. 6 Adminijode nov 17th, 2009 at 10:18

    Bonjour,

    Je suis à l'étude sur Flex et ses possibilités de communication avec un serveur.

    Je m'interroge sur le contenu possible concrètement des Messages. "BlazeDS offre un service de messaging qui permet aux applications Flex de publier des messages (…)".

    Concrètement, que peut-on passer dans les messages? Des objets? Des chaînes de caractères? Du binaire? N'importe quoi? Doit-on coder/décoder les valeurs à l'entrée/à la sortie du canal?

    Merci.

  7. 7 fnicollet nov 17th, 2009 at 10:39

    Bonjour,
    le type (full text ou binaire) dépend du type de canal utilisé. Pour du full texte (chaines de caractères classique type XML), on utilise le canal HTTP. Pour du Binaire, le canal AMF est utilisé. Des objets sérialisés peuvent être envoyés par le canal AMF en passant par les RemoteObject. La serialisation / deserialisation (ce que vous entendez par décodage je pense) se fait automatiquement.

    Fabien

  8. 8 Adminijode nov 17th, 2009 at 10:59

    Merci.

    "Des objets sérialisés peuvent être envoyés par le canal AMF en passant par les RemoteObject."
    Utiliser le Remoting pour transmettre des Objets, veut-il dire que ce n'est pas possible en Messaging uniquement?

    Avec Messaging, pourrait-on sérialiser un objet pour ensuite le faire passer par un cancal AMF et enfin le désérialiser?

    NB: A priori, le Messaging et le Remoting me semblent pouvoir être utilisés en symbiose. Loin de moi l'idée de troller sur "Remoting mieux que Messaging", je cherche simplement à savoir ce qu'il est possible de faire.

  9. 9 fnicollet nov 17th, 2009 at 11:16

Laisser un commentaire

Si vous souhaitez poster du code ActionScript, mettez le entre des balises comme ceci [as]code[/as]. Pour du code MXML, mettez le dans des balises [mxml]code[/mxml]. Merci




Bientôt sur flex-tutorial.fr …

  • - Tutoriaux BlazeDS
  • - Composants Flex

tutorial flex tutorial flex

flex Adobe Air AFCS Data Filter Lib ToasterLib librairies AS3 Flex livres AS3 Flex

 

novembre 2009
L Ma Me J V S D
« oct   déc »
 1
2345678
9101112131415
16171819202122
23242526272829
30