x Ml Blaze Ds Spring

Embed Size (px)

Citation preview

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3par Franck Ponchel (fponchel.developpez.com)

Date de publication : 04/06/2008 Dernire mise jour :

Ce tutoriel a pour objectif de vous aider mettre en place un projet mixte Flex/WTP utilisant Flex 3, BlazeDS et Spring.

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

Introduction.................................................................................................................................................................. 3 I - Rcupration des produits logiciels....................................................................................................................... 4 II - Prparation de l'environnement de dveloppement.............................................................................................. 4 II-a - Pr-requis......................................................................................................................................................4 II-b - Installations................................................................................................................................................... 4 III - Cration et configuration du projet.......................................................................................................................5 IV - Premire application...........................................................................................................................................14 IV-a - Dveloppement de l'IHM Flex................................................................................................................... 15 IV-b - Premier test............................................................................................................................................... 16 IV-c - Cration de WelcomeService.................................................................................................................... 16 IV-d - Dclaration du service auprs de BlazeDS.............................................................................................. 17 IV-e - Tester l'application.....................................................................................................................................17 V - Intgration de Spring...........................................................................................................................................18 V-a - Ajout des dpendances au projet.............................................................................................................. 18 V-b - Configuration du contexte Spring............................................................................................................... 18 V-c - Intgration de Spring BlazeDS................................................................................................................19 V-d - Tester l'application finale............................................................................................................................ 22 VI - Pour aller plus loin............................................................................................................................................. 23

-2Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

IntroductionDans ce tutoriel, nous allons mettre en place une application RIA compose d'un client riche Flex 3 s'excutant au sein d'un navigateur web via le plugin Flash Player et d'un serveur d'application JEE exploitant Spring et BlazeDS.

Architecture logicielle Dans cette architecture, le client Flex ralise des appels de service s'excutant au sein du serveur d'application JEE. Pour cela, j'ai dcid d'utiliser les appels de type RPC (Remote Procedure Call), et plus spcifiquement le composant RemoteObject de Flex, permettant d'invoquer des services Java, sans avoir se soucier de la srialisation/dsrialisation des objets changs entre Flex et Java. BlazeDS est une brique open-source, fournit par Adobe, supportant les appels RPC via RemoteObject. En pratique, il s'agit d'une servlet responsable, entre autres, de : localiser et invoquer les services Java dsrialiser les donnes Flex reues en instances d'objets Java et vice-versa

BlazeDS s'interpose donc entre le client Flex et les services Java la manire d'un proxy. Enfin, nous intgrons ici le framework Spring, non par ncessit, mais parce que celui-ci est trs populaire et que l'intgration entre Spring et BlazeDS est une problmatique rcurrente. Dans notre architecture, Spring est utilis comme container IoC. Spring grera donc le cycle de vie de nos services. BlazeDS devra s'adresser Spring afin de localiser un service invoquer. Nous allons commencer par installer l'ensemble des outils ncessaires, puis nous mettrons en place un projet mixte Flex/WTP configur pour l'utilisation de BlazeDS. Nous dvelopperons un service Java et une IHM Flex trs simple afin de valider notre travail. Enfin, nous ajouterons Spring et adapterons la configuration de BlazeDS.

-3Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

I - Rcupration des produits logiciels Eclipse IDE for Java EE Developers - Windows Flex Builder 3 Professional Eclipse Plug-in - Windows (Ncessite de s'enregistrer sur le site d'Adobe) BlazeDS : Tlcharger la dernire #Binary Distribution# depuis la page suivante : BlazeDS Releases Spring Framework : Tlcharger la dernire version stable : Spring Download Serveur d'application Tomcat 6.0. Prendre l'installation core sous forme d'archive zip : Apache Tomcat 6.0.x

II - Prparation de l'environnement de dveloppementNous allons installer Eclipse, le plugin Flex Builder 3 et le serveur d'application Apache Tomcat, puis les framework BlazeDS et Spring. Pour les besoins de l'article, l'ensemble sera install dans le rpertoire c:\appl.

II-a - Pr-requisVous devez disposer d'un JDK 1.5 ou plus d'install. Pour vrifier, ouvrir un invit de commande et taper : Vrification de la version de Java installeC:\>java -version java version "1.5.0_08" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_08-b03) Java HotSpot(TM) Client VM (build 1.5.0_08-b03, mixed mode)

Se reporter la FAQ java en cas de problme : La FAQ Java

II-b - InstallationsDcompresser l'archive d'Eclipse dans le rpertoire c:\appl\eclipse. Pour la suite de cet article, nous considrerons qu'Eclipse est install dans ce rpertoire. Une fois Eclipse install, lancer l'installation du plugin Flex Builder 3 Professional : Ceci ncessite les droits d'administration sur le poste de travail.

Choisir c:\appl\fb3 comme rpertoire d'installation, et c:\appl\eclipse comme rpertoire o est install Eclipse :

-4Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

Choix d'installation Dcompresser l'archive de Tomcat 6.0 dans c:\appl\tomcat, celle de Spring dans c:\appl\spring et enfin celle de BlazeDS dans c:\appl\blazeds. Vous trouverez, dans c:\appl\blazeds, 2 fichiers, dont blazeds.war qui contient une webapp JEE pr-configure pour BlazeDS.

III - Cration et configuration du projet Dmarrer Eclipse Slectionner un rpertoire pour la cration d'un workspace. Par ex : c:\worspace Ouvrir la perspective Flex Development (Menu Windows / Open Perspective / Other# / Flex Development)

-5Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

Perspective Flex Development

Crer un nouveau projet Flex (Menu File / New / Flex Project) : project name : FBSIntegration pour Flex BlazeDS Spring Integration application server type : J2EE laisser coch #LiveCycle Data Services# et Create combined Java/Flex project using WTP

-6Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

Assitant de cration de projet Flex Cliquer sur le bouton Next afin d'atteindre l'tape Configure JEE Server Cliquer sur le bouton New... afin de configurer une instance du serveur Tomcat dans Eclipse Slectionner Apache / Tomcat v6.0 Server, puis cliquer sur Next>

-7Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

Assitant de cration de projet Flex Renseigner le champ #Tomcat installation directory# pour qu'il pointe sur le rpertoire d'installation de Tomcat (c:\appl\tomcat). Puis cliquer sur Finish

-8Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

Assitant de cration de projet Flex De retour au wizard de configuration du projet Flex/WTP, renseigner le champ Flex WAR File pour dsigner le fichier blazeds.war situ dans le rpertoire d'installation de BlazeDS (c:\appl\blazeds\blazeds.war).

-9Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

Assitant de cration de projet Flex Cliquer sur Next > L'cran suivant nous indique que les fichiers sources Flex sont situs dans flex_src/, tandis que les fichiers sources Java sont situs dans src/ Cliquer sur Finish

- 10 Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

Assitant de cration de projet Flex Il reste un dernier paramtrage raliser : Slectionner le projet FBSIntegration dans la vue Flex Navigator, puis afficher les proprits du projet (menu Project / Properties / Flex Server) Modifier le champ Context root pour que celui-ci dsigne correctement le nom du contexte de notre application, savoir /FBSIntegration.

- 11 Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

Proprits du projet Enfin, il faut configurer le serveur Tomcat au sein d'Eclipse pour qu'il dploie notre application : Si ce n'est pas dj fait, afficher la vue Servers (menu Windows / Show View / Other / Server / Servers) Ajouter le projet FBSIntegration au serveur Tomcat (Bouton droit sur le serveur #Tomcat v6.0 server at localhost, et ajouter le projet FBSIntegration la liste des Configured Projects (menu Add and Remove Projects...)

- 12 Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

Proprits du serveur Tomcat

- 13 Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

Ajout du projet au serveur Tomcat

IV - Premire applicationNous allons dvelopper une application trs simple, de type "Hello World" afin de valider le bon fonctionnement de l'ensemble. Le scnario est le suivant : L'utilisateur saisit un login, et clique sur le bouton Appel de WelcomeService Ceci dclenche un appel la mthode sayHello du service distant welcomeService Le message retourn par la mthode sayHello est affich dans la zone de rponse. En cas d'chec de l'appel, le message d'erreur est affich dans la zone de rponse.

- 14 Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

Vue design

IV-a - Dveloppement de l'IHM FlexLe fichier flex_src/FBSIntegration.mxml contient principalement : le champ de saisie du login : tiLogin le bouton dclenchant l'appel : btnAppel le composant RemoteObject permettant d'effectuer l'appel distant : roWelcomService la zone de texte permettant d'afficher le rsultat de l'appel : taReponse

FBSIntegration.mxml org.springframework.web.context.ContextLoaderListener ...

Nous allons dclarer le bean welcomeServiceBean en tant qu'instance de la classe WelcomeService, en ajoutant une dclaration au fichier webApplicationContext.xml prcdemment cr : webApplicationContext.xml

V-c - Intgration de Spring BlazeDSEn l'tat, BlazeDS n'utilise pas le context Spring pour localiser les instances du service.- 19 Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

Il est ncessaire de configurer, auprs de BlazeDS, une Factory spcifique, qui s'occupera d'interroger le contexte Spring. Cette technique a t initialement propose par Jeff Vroom : Spring and Flex Integration by Jeff Vroom Il vous faut ajouter le fichier SpringFactory.java suivant dans le package com.developpez.web : SpringFactory.javapackage com.developpez.web; import import import import import import import import org.springframework.beans.BeansException; org.springframework.beans.factory.NoSuchBeanDefinitionException; org.springframework.context.ApplicationContext; org.springframework.web.context.support.WebApplicationContextUtils; flex.messaging.FactoryInstance; flex.messaging.FlexFactory; flex.messaging.config.ConfigMap; flex.messaging.services.ServiceException;

/** * This interface is implemented by factory components which provide * instances to the flex messaging framework. To configure flex data services * to use this factory, add the following lines to your services-config.xml * file (located in the WEB-INF/flex directory of your web application). * * * * * * You also must configure the web application to use spring and must copy the spring.jar * file into your WEB-INF/lib directory. To configure your app server to use spring, * you add the following lines to your WEB-INF/web.xml file: * * * contextConfigLocation * /WEB-INF/applicationContext.xml * * * * org.springframework.web.context.ContextLoaderListener * * * Then you put your spring bean configuration in WEB-INF/applicationContext.xml (as per the * line above). For example: * * * * * * * * * Now you are ready to define a destination in flex that maps to this existing service. * To do this you'd add this to your WEB-INF/flex/remoting-config.xml: * * * * spring * weatherBean * * * * @author Jeff Vroom */ public class SpringFactory implements FlexFactory { private static final String SOURCE = "source"; /** * This method can be used to initialize the factory itself.

It is called with configuration

- 20 Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

SpringFactory.java* parameters from the factory tag which defines the id of the factory. */ public void initialize(String id, ConfigMap configMap) {}

/** * This method is called when we initialize the definition of an instance * which will be looked up by this factory. It should validate that * the properties supplied are valid to define an instance. * Any valid properties used for this configuration must be accessed to * avoid warnings about unused configuration elements. If your factory * is only used for application scoped components, this method can simply * return a factory instance which delegates the creation of the component * to the FactoryInstance's lookup method. */ public FactoryInstance createFactoryInstance(String id, ConfigMap properties) { SpringFactoryInstance instance = new SpringFactoryInstance(this, id, properties); instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId())); return instance; } // end method createFactoryInstance() /** * Returns the instance specified by the source * and properties arguments. For the factory, this may mean * constructing a new instance, optionally registering it in some other * name space such as the session or JNDI, and then returning it * or it may mean creating a new instance and returning it. * This method is called for each request to operate on the * given item by the system so it should be relatively efficient. *

* If your factory does not support the scope property, it * report an error if scope is supplied in the properties * for this instance. */ public Object lookup(FactoryInstance inst) { SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst; return factoryInstance.lookup(); }

static class SpringFactoryInstance extends FactoryInstance { SpringFactoryInstance(SpringFactory factory, String id, ConfigMap properties) { super(factory, id, properties); }

public String toString() { return "SpringFactory instance for id=" + getId() + " source=" + getSource() + " scope=" + getScope(); }

public Object lookup() { ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(flex.messaging.FlexContext.getServletConfig().getServletConte String beanName = getSource(); try { return appContext.getBean(beanName); } catch (NoSuchBeanDefinitionException nexc) { ServiceException e = new ServiceException(); String msg = "Spring service named '" + beanName + "' does not exist."; e.setMessage(msg);

- 21 Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

SpringFactory.javae.setRootCause(nexc); e.setDetails(msg); e.setCode("Server.Processing"); throw e; } catch (BeansException bexc) { ServiceException e = new ServiceException(); String msg = "Unable to create Spring service named '" + beanName + "' "; e.setMessage(msg); e.setRootCause(bexc); e.setDetails(msg); e.setCode("Server.Processing"); throw e; } } } }

Une fois la SpringFactory cre, il est ncessaire de la dclarer pour que BlazeDS sache la localiser. Pour cela, ajouter une section au dbut du fichier services-config.xml, situ dans WebContent/WEB-INF/ flex : Mise jour de services-config.xml ...

Enfin, il faut modifier la destination welcomeServiceDest dans le fichier remoting-config.xml, pour que celle-ci utilise la factory SpringFactory afin de localiser le bean Spring welcomeServiceBean. La balise est ajoute, afin de spcifier la SpringFactory dclare dans le services-config.xml. La balise est modifie afin de spcifier le nom du bean Spring utiliser. Enfin, la balise est supprime, car c'est Spring qui gre dornavant le cycle de vie du service. Mise jour de remoting-config.xml SpringFactory welcomeServiceBean

V-d - Tester l'application finaleDmarrer le serveur d'application Tomcat Dans la console, les traces suivantes permettent de vrifier l'initialisation correcte de Spring : Traces de dmarrage du serveur d'application

- 22 Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/

Intgration de Flex 3, BlazeDS et Spring sous Flex Builder 3 par Franck Ponchel (fponchel.developpez.com)

Traces de dmarrage du serveur d'applicationINFO: Initializing Spring root WebApplicationContext ...# INFO: Loading XML bean definitions from ServletContext resource [/WEB-INF/classes/ webApplicationContext.xml] ... INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@7f58ef: defining beans [welcomeServiceBean]; root of factory hierarchy ... INFO: Root WebApplicationContext: initialization completed in 242 ms

Lancer nouveau un navigateur sur l'URL suivante : http://localhost:8080/FBSIntegration/FBSIntegration.swf

VI - Pour aller plus loin...Vous disposez maintenant d'un projet mixte WTP/Flex correctement configur pour exploiter Flex, BlazeDS et Spring. A vous maintenant de construire sur cette base votre application ! Voici quelques ressources utiles : BlazeDS developper guide Le framework MVC Cairngorm Flex RIAs with Cairngorm Microarchitecture

- 23 Copyright 2008 - Franck Ponchel. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://fponchel.developpez.com/tutoriel/flex3/integration/blazeds-spring/