Apache Adobe Flex TutorialTutoriaux Adobe Flex & AIR en Français

8sept/112

Intégration de Flex 4 et les Servlet Java avec HTTPService

Tutorial Flex écrit par Naoufal Ben Bouazza
Publiez vous aussi sur flex-tutorial!

La plupart des applications Flex qu’on développe communique avec un serveur en utilisant l’une des méthodes proposées par le SDK Flex.
Dans ce tutoriel, nous nous concentrerons sur la façon de développer des applications Flex pour communiquer avec des Servlet côté serveur Java (http://fr.wikipedia.org/wiki/Servlet), et comment traiter les données envoyées par le serveur dans votre application Flex.
Flex 4 propose trois méthodes pour accéder à des données côté serveur:

Dans ce tutoriel nous allons nous concentrer sur la méthode d'accès aux données HTTPService. Nous allons apprendre à l'utiliser en conjonction avec les Servlet sur le serveur pour envoyer et récupérer des résultats dynamiques dans votre application Flex.

Nous allons discuter du format léger d'échange de donnée JSON (JavaScript Object Notation) (http://json.org/jsonfr.html) qui peut être utilisé pour envoyer et récupérer des données sur HTTP à partir d'une application Flex à une Servlet Java.
Typiquement, une Servlet est utilisée pour créer dynamiquement des données, et en retournant la présentation du code HTML / une page HTML qui est rendue par votre navigateur Web. Mais dans ce tutoriel, vous apprendrez comment utiliser une Servlet pour construire des résultats dynamiques et retourner un objet JSON au lieu du code HTML, ainsi que comprendre comment la classe HTTPService peuvent être utilisée pour charger des données JSON.
Dans l’exemple suivant, nous allons utiliser certaines bibliothèques tierces open source pour coder et décoder des objets JSON en Flex et Java.

  • Json-lib (http://json-lib.sourceforge.net/) : est une bibliothèque Java open source pour l'encodage et le décodage des objets JSON en Java.

JSON-lib nécessite (au moins) les dépendances suivantes dans votre classpath:

  • jakarta commons-lang 2.5
  • jakarta commons-beanutils 1.8.0
  • jakarta commons-collections 3.2.1
  • jakarta commons-logging 1.1.1
  • ezmorph 1.0.6

En plus de ces librairies Java, vous aurez besoin d'une librairie pour votre projet Flex:

  • as3corelib (https://github.com/mikechambers/as3corelib): est une bibliothèque open source ActionScript pour l'encodage et le décodage des objets JSON en Flex /ActionScript

Ici, je suppose que vous savez créer un projet Web Java et ajoutez la bibliothèque Json-lib ainsi que les dépendances dont elle a besoin à votre projet dans Eclipse, ou dans votre IDE préféré. Une fois que vous avez copié le fichier JAR json-slib dans votre projet, commencez à écrire le code Java Servlet suivant et de le déployer sur votre serveur web.

Vous pouvez bien sûr utiliser des systèmes de résolution de dépendances comme Maven

Notez que vous devrez spécifier l'adresse du serveur web comme l'url de votre HTTPService dans le code MXML.
Nous allons commencer avec l'écriture JSONService.java :

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;

/**
 *
 * @author dell
 */
public class JSONService extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            JSONObject obj = new JSONObject();

            obj.put("titre", "Titre1");
            obj.put("pages", new Integer(300));
            obj.put("prix", new Double(99.99));
            obj.put("disponibilité", new Boolean(true));
            obj.put("description", "Description1");
            out.println(obj.toString());
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

Dans le code ci-dessus JSONService.java, nous avons créé un JsonObject fournis par la bibliothèque json-lib et nous avons modifié ses propriétés en utilisant les différents obj.put (Object, Object). Enfin, nous avons écrit notre JsonObject dans la sortie de notre Servlet.

Ensuite, nous allons écrire le code MXML Flex, qui va utiliser HTTPService pour invoquer la servlet qui construit et renvoie un objet JSON. Mais avant cela nous allons devoir copier le fichier as3corelib.swc dans le dossier de notre projet libs. Cela garantit que toutes les classes JSON API seront disponibles lors de la compilation. Donc, assurez-vous que vous avez téléchargé As3corelib partir de l'URL spécifiée ci-dessus.

Code MXML :

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
			   creationComplete="httpSrv.send()">
	<fx:Script>
		<![CDATA[
			import com.adobe.serialization.json.JSONDecoder;

			import mx.controls.Alert;
			import mx.rpc.events.FaultEvent;
			import mx.rpc.events.ResultEvent;

			protected function httpSrv_resultHandler(event:ResultEvent):void
			{
				var jd:JSONDecoder = new JSONDecoder(String(event.result),true);
				dgGrid.dataProvider = jd.getValue();

			}

			protected function httpSrv_faultHandler(event:FaultEvent):void
			{
				Alert.show(event.fault.message);

			}

		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
		<s:HTTPService id="httpSrv"
						url="http://localhost:8080/JsonExemple/JSONService"
						result="httpSrv_resultHandler(event)"
						fault="httpSrv_faultHandler(event)"/>
	</fx:Declarations>
	<mx:DataGrid id="dgGrid" width="100%" height="100%"/>

</s:Application>

Dans le code ci-dessus, nous avons défini HTTPService avec la propriété url mis au fichier JSONService.java déployé sur notre serveur web. Vous pouvez modifier cette valeur pour correspondre à l'adresse de votre serveur Web. Nous gérons l'événement résultat de HTTPService via la méthode gestionnaire d'événement httpSrv_resultHandler().  Dans cette méthode, nous avons créé un objetJSONDecoder ActionScript (provenant de la bibliothèque d’as3corelib open source).

La classe JSONDecoder lit le résultat de HTTPService et le décode en un objet ActionScript en utilisant la méthode getValue (). Cette méthode renvoie un objet, que l'on peut définir comme dataProvider du composant DataGrid. Nous invoquons le service HTTP par la méthode httpSrv.send() qui est appelée sur l’évènement creationComplete de notre application.

Conclusion

Ce tutorial présente la manière la plus simpliste de faire communiquer une Servlet et une application Flex. Bien sûr dans un cas concret, on se connecterait à une base de données et on construirait nos objets JSON à la volée.
Dans un prochaine tutoriel je montrerai comment envoyer des paramétrés depuis Flex vers la servlet en utilisant des collections Java pour stocker ces valeurs au lieu d'une base de données.

5déc/100

Intégrer des composants Flex 4 dans Microsoft Office SharePoint

Tutorial Flex écrit par Eric de People In Action (http://blog.piaction.com/)
Publiez vous aussi sur flex-tutorial!

SharePoint est une série de logiciels pour applications web et portails, développée par Microsoft. Les fonctionnalités des produits SharePoint sont la gestion de contenu, les moteurs de recherche, la gestion électronique de documents, les forums, la création de formulaires et de statistiques décisionnelles.

Flex_avec_Sharepoint_0ASZM9_2bBLy_ZGdmd3I5NXdfMzQzZHI1azdxYzQ_0

Presque toutes les informations dans SharePoint sont stockées dans des listes et cette plateforme offre un ensemble de services pour les manipuler (services web, RPC, …).

Dans l’exemple suivant, nous allons développer une application Flex qui utilise des données stockées dans SharePoint. Pour cela nous allons créer un composant Flex qui appelle une «Assemblée» retournant une liste SharePoint. Ce composant mettra à jour le titre d’un élément de la liste par le biais d’un service web
organization

Création de l’application Flex

Lancez Flash Builder et créez un nouveau «Projet Flex».

Ouvrez le fichier d’application principal de votre projet et copiez le code suivant:

<?xml version="1.0" encoding="utf-8"?>
<spark:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                   xmlns:spark="library://ns.adobe.com/flex/spark"
                   xmlns:mx="library://ns.adobe.com/flex/mx"
                   initialize="onInit()">

  <fx:Declarations>

  </fx:Declarations>

  <fx:Script>
    <![CDATA[
      import mx.collections.ArrayCollection;
      import mx.controls.Alert;
      import mx.rpc.events.FaultEvent;
      import mx.rpc.events.ResultEvent;

      [Bindable]
      private var sharePointList:ArrayCollection;

      private function onInit():void
      {
      }

      private function searchItems():void
      {
      }

      private function searchResultHandler(event:ResultEvent):void
      {
      }

      private function faultHandler(event:FaultEvent):void
      {
        Alert.show(event.fault.message, "Warning");
      }

      private function updateItemResultHandler(event:ResultEvent):void
      {
      }
    ]]>
  </fx:Script>
  <spark:VGroup horizontalAlign="left">
    <spark:VGroup horizontalAlign="right">
      <mx:Form labelWidth="100" paddingRight="0" paddingBottom="0">
        <mx:FormItem label="Site Address">
          <spark:Label text="{siteAddress}"/>
        </mx:FormItem>
        <mx:FormItem label="List GUID">
          <spark:TextInput id="list" width="300"/>
        </mx:FormItem>
        <mx:FormItem label="View GUID">
          <spark:TextInput id="view" width="300"/>
        </mx:FormItem>
      </mx:Form>
      <spark:Button label="search" click="searchItems()"/>
    </spark:VGroup>

    <mx:DataGrid id="allItems" dataProvider="{sharePointList}" width="100%">
      <mx:columns>
        <mx:DataGridColumn dataField="ows_ID"       headerText="Id"       width="15"/>
        <mx:DataGridColumn dataField="ows_Title"    headerText="Title"    width="90"/>
        <mx:DataGridColumn dataField="ows_Modified" headerText="Modified" width="50"/>
      </mx:columns>
    </mx:DataGrid>

  </spark:VGroup>
</spark:Application>

Récupération des paramètres

Nous avons choisi d’utiliser les flashVars pour passer des paramètres à notre composant. Pour y accéder nous utilisons la propriété « parameters » de l’objet «FlexGlobals.topLevelApplication». Pour accéder à la valeur de son paramètre, il suffit de procéder ainsi : parameters.nomDuParametre

Nous définissons le paramètre suivant :

  • siteAddress : adresse de votre site SharePoint.

Nous récupérons ce paramètre lors de l’envoi de l’événement initialize par l’application.

13nov/092

Flex BlazeDS – Les fonctionnalités de BlazeDS

BlazeDS consiste principalement en trois services:

  • Le Remoting Service, qui permet aux applications Adobe Flex / Air d'invoquer directement des méthodes d"objets Java déployés sur votre serveur applicatif.
  • Le Messaging Service, qui permet à votre application Adobe Flex de publier des messages et de s'inscrire à des "destinations", permettant le développement d'application temps réel et/ou collaboratives.
  • Le Proxy Service, qui permet aux applications Flex de faire des requêtes vers des services situés sur des domaines différents (cross-domain communication). En d'autres mots, cela permet à votre application Flex d'accéder à des services situés sur des domaines différents de celui sur lequel est hébergé l'application et cela, sans avoir à déployer un fichier cross-domain.xml sur chaque domaine ciblé.

Remoting Service RPC (Remote Procedure Call)

Les services Remote Procedure Call (RPC) ont été crées pour des applications dans lesquelles on cherche à accéder à la donnée grâce à des appels / réponse. Les services RPC laissent le client faire une requête asynchrone au service distant pour va traiter cette requête et renvoyer directement la data au client. Vous pouvez accéder à la donnée grâce ) des composants RPC client comme les services HTTP (GET ou POST), le SOAP (WebService), ou des objets Java (Remote Object Service).

BlazeDS vous permet d'utiliser les composants RemoteObject pour accéder à vos objets Java distants sans les avoir configuré comme des web services.

Un composant client RPC appelle ce web service. Le composant conserve ensuite la réponse (data) du web service dans un objet ActionScript, à partir duquel vous pouvez facilement obtenir la donnée qui vous intéresse. Les composants client RPC sont HTTPService, WebService et RemoteObject.

Vous pouvez utiliser le service de proxy de BlazeDS pour des appels HTTP ou WebService directs mais vous ne pouvez pas utiliser les composants RemoteObject sans BlazeDS ou ColdFusion.

Messaging Service

Le service de messaging permet aux application client de communiquer de manières asynchrone par échange de messages avec le serveur. Un message définit des propriétés telles qu'un identifiant unique, les headers (en-têtes) BlazeDS, des headers personnalisés et le corps du message.

Les applications client qui envoient des messages sont appelées "producers". Vous pouvez définir un "producer" dans une application Flex en utilisant le composant Producer. Les applications qui reçoivent des messages sont appelées "consumers" et peuvent être définit grâce au composant Adobe Flex Consumer. Le composant Consumer s'inscrit à une destination située côté serveur et va recevoir les messages que le Producer envoie vers cette destination.

messageflow

Le Messaging Service supporte aussi la liaison avec JMS (Java Message Service) et utilisant un JMSAdapter ce qui permet aux applications Flex d'échanger avec les applications Java client (en savoir plus sur JMS avec Flex).

5août/090

AFCS – Tutorial Introduction à AFCS avec Flex (11 – Exemple Avancé avec Baton et Yahoo!)

Suite du tutorial

  1. AFCS – Tutorial Introduction à AFCS avec Flex (1)
  2. AFCS – Tutorial Introduction à AFCS avec Flex (2 – Préparer la room et Flex Builder)
  3. AFCS – Tutorial Introduction à AFCS avec Flex (3 – Les composants de base Pods)
  4. AFCS – Tutorial Introduction à AFCS avec Flex (4 – Authentification et Session)
  5. AFCS – Tutorial Introduction à AFCS avec Flex (5 – Types de Droits Utilisateur)
  6. AFCS – Tutorial Introduction à AFCS avec Flex (6 – Architecture Globale d'AFCS)
  7. AFCS – Tutorial Introduction à AFCS avec Flex (7 – Utilisation du Shared Manager UserManager)
  8. AFCS – Tutorial Introduction à AFCS avec Flex (8 – Données partagées et CollectionNodes)
  9. AFCS – Tutorial Introduction à AFCS avec Flex (9 – Exemple Simple de CollectionNode)
  10. AFCS – Tutorial Introduction à AFCS avec Flex (10 – Exemple Simple de SharedProperty)

Traduction de Introduction to Adobe Flash Collaborative Services par Romin Irani.

Dans ce tutorial Adobe Flex avec AFCS, on va voir comment créer une application multi-utilisateur dans laquelle les participants peuvent chercher ensemble une liste de restaurant dans une certaine ville filtré par type de cuisine. N'importe quel utilisateur peut donc mettre à jour la ville et le type de cuisine. La donnée sera partagée entre tous les participants et les résultats de recherches seront les mêmes pour tous les participants pour une synchronisation totale.

Voyons tout d'abord comment se présente l'application pour un utilisateur seul. Une fois enregistré, l'interface se présente comme suit. On a deux Pods, un Pod Roster et un Pod Chat qui sont des Pods standard d'AFCS. L'utilisateur peut entrer une ville et un type de cuisine et ensuite cliquer sur Search. Cela va récupérer tous les restaurants servant ce type de cuisine dans la ville sélectionnée. Les résultats de recherches sont obtenus grâce au service web de Yahoo! et l'intégration se fait via Yahoo Query Language.

afcs-adv-1

Voici un screenshot de l'application sur lequel on peut voir une liste de restaurants servant de la cuisine Chinoise, récupérée depuis Yahoo!. L'utilisateur peut cliquer sur n'importe quel de ces enregistrement pour afficher plus de détail dans le panneau de droite. Il y a aussi 2 liens par lesquels vous pouvez voir la carte Google Maps et un lien vers le site internet le cas échéant.

afcs-adv-2

Si un autre utilisateur s'enregistre sur l'application, il va récupérer la dernière ville entrée, le dernier type de cuisine entré ainsi que les derniers résultats de recherche.

4juin/092

Flash Builder 4 – Nouvelles fonctionnalités en beta sur Adobe Labs

Il y a quelques semaines, Adobe annonçait un changement de nom dans sa gamme de produits. Flex Builder devenait donc Flash Builder à partir de sa version 4. Jusque là, il n'était pas possible d'essayer ce fameux Flash Builder mais depuis le 1er Juin, Adobe a lancé la première beta publique de Flash Builder (et de Flash Catalyst, j'y reviendrai dans un autre billet sur flex-tutorial.fr).

Pour ceux qui ne suivent pas du tout, Flash Builder est un environnement de développement permettant d'aider les développeurs à créer des applications. Ces applications peuvent aussi bien être des projets AS3 pur ou bien des projets utilisant le framework applicatif Flex.

Vous pouvez dès maintenant télécharger la beta de Flash Builder depuis le site d'Adobe Labs:

Télécharger la beta de Flash Builder

Vraisemblablement, la version RC1 (Release Commercial) sortira avant la fin de l'année. N'oubliez pas que le but de cette beta n'est pas de simplement montrer ce qu'ils ont fait jusque là, c'est à vous développeurs de l'extrême d'aller traquer les bugs potentiels et de les reporter s'ils n'existent pas déjà.

Forum et report de bugs Gumbo sur les labs

Les tutoriaux Flash Builder 4

Pour ne pas vous lâcher dans la nature avec ce nouvel outil, Adobe a préparé plusieurs tutoriaux permettant d'appréhender les nouvelles fonctionnalités de Flash Builder 4.