Création d’un projet mixte Flex-Java, utilisant Tomcat et BlazeDS Introduction Requis - FlashBuilder 4.0 (avec accès administrateur) Blazeds-turnkey 4.0 Apache Tomcat 6.0 Configuration du logiciel Ouvrir FlashBuilder 4 en mode administrateur Aller dans Aide>Installer le nouveau logiciel Dans « utiliser avec », cliquer sur « Ajouter » puis entrer les valeurs suivantes : Nom : JavaIndigo Emplacement : http://download.eclipse.org/releases/indigo Sélectionner : Programming languages > Eclipse Java Devlopment Tools Web, XML, Java EE, and OSGi Enterprise Development > * WTP > * Installer puis redémarrer Création du projet Fichier > Nouveau > Projet Flex Dans l’écran « Création d’un projet Flex », sélectionner les entrez suivantes : Insérer le nom du projet, Sélectionner « Application Web », SDK 4.0, Type de Serveur : J2EE Utiliser le service d’accès aux objets distants BlazeDS Créer un projet mixte Java/Flex à l’aide de WTP Dossier source Java : src_java Dans l’écran « Configuration du serveur J2EE » : Environnement d’éxécution cible : Nouveau Apache Tomcat 6.0 Suivant > Terminer (il n’y a rien à ajouter vu que rien n’a été créé pour l’instant) Sélectionner le fichier WAR BlazeDS Chemin d’accès à la bibliothèque : Dossier source principal : src_flex Terminer Hello World Classe Java HelloWorld Dans le dossier src_java, créer un package (ici ‘model’) et y insérer une classe HelloWorld.java package model; public class HelloWorld { public HelloWorld(){} public String sayHello() { return "Hello from Java"; } } Remoting-config Modifier le fichier « WebContent > WEB-INF > flex > remoting-config.xml » et y ajouter un objet Remoting : <destination id="hello"> <properties> <source>model.HelloWorld</source> <scope>session</scope> </properties> </destination> Chaque objet remoting doit être configure ici. La variable <scope>session</scope> permet de préciser que les remoting objects seront supprimés de la mémoire à la fermeture du programme Application C’est dans le fichier principal de votre application (ici GestionnaireStages.mxml) que tout va se passer. Supprimez-en tout le contenu. Général Dans un premier temps, créer l’application générale et y ajouter un bouton. Lors du click sur le bouton, vous allez appeler la fonction java permettant d’afficher le hello world. Pour cela, vous allez passer par une fonction actionscript, qu’il vous faut donc déclarer lors du clic sur le bouton. <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Button label="Button Hello" id="btnHello" click="callHello(event)"/> </mx:Application> CallHello Commencez par créer le remoteObject, ayant pour destination le remoting défini précédement. Il appelle une fonction au résultat, et à l’erreur. Le <mx:Script> <![CDATA[]]></mx:Script> correspond à une balise <script> en HTML. A noter que tout doit se passer à l’intérieur du CDATA[]. <mx:RemoteObject id="roHello" destination="hello"> <mx:method name="sayHello" result="onResult(event)" fault="onFault('roHello.sayHello',event)"/> </mx:RemoteObject> <mx:Script> <![CDATA[ ]]> </mx:Script> Une fois l’environnement mis en place, passons au HelloWorld proprement dit. Il vous faut donc trois fonctions : callHello(), onResult() et onFault(). Voici leur syntaxe : import mx.controls.Alert; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; private function callHello(event:MouseEvent):void { roHello.sayHello() as String; } private function onResult(event : ResultEvent) : void { Alert.show(event.result.toString()); } private function onFault(remoteObject : String, event : FaultEvent) : void { Alert.show(event.fault.message); } Remarquez que la fonction callHello va appeler la méthode du remote Object définie précédement Réécriture des variables de compilation Config.xml Créer un fichier config.xml à la racine du dossier src_flex : <?xml version="1.0" encoding="utf-8"?> <config> <channels> <channel id="amf" endpoint="http://localhost:8080/GestionnaireStages/messagebroker/amf"/> </channels> </config> Avec « GestionnaireStages » le nom du projet, et « 8080 » le port par défaut du serveur tomcat Ce fichier permet de redéfinir les variables de channel utilisées lors de la publication du contenu. HTTPService Dans le fichier principal, reprenez la ligne <mx :Application> et complétez-là de la façon suivante : applicationComplete="configSrv.send()" Ajoutez ensuite une commande HTTPService : <mx:HTTPService id="configSrv" url="config.xml" resultFormat="e4x" result="configResultHandler(event)"/> Plus qu’à definer la function configResultHandler dans le code, toujours à l’intérieur de CDATA[] : import mx.messaging.channels.AMFChannel; import mx.messaging.ChannelSet; private var _channelSet:ChannelSet; private function configResultHandler(event:ResultEvent):void { var xml:XML = event.result as XML; var amfEndpoint:String = "" + xml..channel.(@id=="amf").@endpoint; if (amfEndpoint == "") Alert.show("amf channel not configured", "Error"); else { _channelSet = new ChannelSet(); var channel:AMFChannel = new AMFChannel("my-amf", amfEndpoint); _channelSet.addChannel(channel); roHello.channelSet = _channelSet; } } Nous lui demandons, au chargement de l’application, d’aller chercher le channel de diffusion dans le fichier config.xml, puis de l’appliquer à chaque remoteObject créé. Il est évident qu’il faudra renseigné ici chacun des remote objects créés par la suite. Ajouter le projet sur le serveur Dans l’onglet serveur, vous devriez avoir un serveur Tomcat. Clic-droit > Add and Remove > ajoutez votre projet > Terminer Lancez le serveur Plus qu’à lancer l’application, et votre bouton vous affiche magiquement la chaine « Hello from Java ! »