Syndication : Atom 1.0  RSS 2.0
Blogs des développeurs   »   Hikage

Article complet: Spring Blaze DS, ou l'intégration facile entre un backend Spring et Flex

18/12/2008

Permalink 11:30:00, Catégories: Java, Récapitulatif Web, Spring, Web, 1115 mots   French (BE) , Hikage

[Java][Spring][Web] Spring Blaze DS, ou l'intégration facile entre un backend Spring et Flex

Jeremy Grelle vient d'annoncer officiellement la première milestone de Spring BlazeDS Integration ( annonce ).
Ce projet à pour but de simplifier le développement d'application Flex utilisant un backend Java/Spring.

Jusqu'ici, cette intégration était réalisée via le projet BlazeDS, un projet OpenSource d'Adobe, et cela nécessitait une configuration spécifique.
Pour plus d'information, je vous recommande la lecture de l'article de Franck Ponchel sur l'intégration de Flex 3 et Spring avec le projet Blaze DS.

Dans la suite de ce billet, je vais vous montrer la manière de faire avec Spring Blaze DS Integration.

[Suite:]

Configuration du web.xml

La où BlazeDS se base directement sur les servlets, Spring Blaze DS va réutiliser le framework MVC de Spring.
C'est donc une DispatcherServletqui sera utilisée dans le fichier web.xml

 
  <!-- Front Controller de Spring MVC qui va gérer les requêtes Flex --> 
  <servlet> 
  <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
  <init-param> 
  <param-name>contextConfigLocation</param-name> 
  <param-value>/WEB-INF/config/web-application-config.xml</param-value> 
  </init-param> 
  <load-on-startup>1</load-on-startup> 
  </servlet> 
   
  <!-- Mapping des requêtes pour le controlleur Spring --> 
  <servlet-mapping> 
  <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
  <url-pattern>/messagebroker/*</url-pattern> 
  </servlet-mapping> 

Création des Beans d'infrastructure

La suite de la configuration se fait dans le fichier de configuration de la servlet ( web-application-config.xml dans notre cas ).

La première chose à faire est de configurer le MessageBroker de Flex :

<!-- Factory qui va créer le broker Flex --> 
  <bean id="flexMessageBroker" class="org.springframework.flex.messaging.MessageBrokerFactoryBean" > 
    <!-- Configuration du chemin vers le service-config.xml --> 
    <property name="servicesConfigPath" value="/WEB-INF/config/flex/services-config.xml" /> 
  </bean>

On retrouve ici la configuration du chemin vers le fichier de services, ce qui était fait dans le web.xml lors de l'utilisation normale de BlazeDS.

Il est ensuite nécessaire de configurer un Bean spécial, le MessageBrokerHandlerAdapter. Celui-ci va permettre au MessageBroker de s'intégrer dans l'infrastructure Spring MVC :

 
<bean class="org.springframework.flex.messaging.servlet.MessageBrokerHandlerAdapter"/>

Exportation d'un service

Il ne reste plus qu'a définir et créer un Bean de type service (sous forme d'un POJO) et de l'exporter grâce à une classe de Spring Blaze DS.

Voici le service :

 
public interface TuduService { 
  public List<Tudu> listAll(); 

 
public class TuduServiceImpl implements TuduService{ 
 
  @Override 
  public List<Tudu> listAll() { 
    
    List<Tudu> result = new ArrayList<Tudu>(); 
    result.add(new Tudu("tudu1", "Récuperer Spring Flex", "FAIT")); 
    result.add(new Tudu("tudu1", "Faire un projet d'exemple Spring Flex", "EN COURS")); 
    result.add(new Tudu("tudu1", "Ecrire un billet sur mon blog", "A FAIRE")); 
 
    return result; 
  } 

Sa déclaration dans le XML et son exportation :

<bean id="tuduService" class="com.developpez.hikage.springflex.TuduServiceImpl" /> 
  
  <!-- Exportation du service Tudu sous le nom TuduService --> 
  <bean id="tudu" class="org.springframework.flex.messaging.remoting.FlexRemotingServiceExporter"> 
  <property name="messageBroker" ref="flexMessageBroker"/> 
  <property name="service" ref="tuduService"/> 
  <property name="serviceId" value="tuduService"></property> 
  </bean>  

Le serviceId étant le nom de la destination à utiliser dans le code Flex.

Partie Flex

Dans le services-config, il est nécessaire de bien mettre le channel par défaut dans le remoting-service :

<service id="remoting-service" 
  class="flex.messaging.services.RemotingService"> 
  <adapters> 
  <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/> 
  </adapters> 
  <default-channels> 
  <channel ref="my-amf"/> 
  </default-channels> 
</service>   
 

Cela permet ainsi de ne plus devoir créer les destinations une par une, celles-ci étant simplement définie dans la configuration Spring et donc d'utiliser directement le RemoteObject comme ceci :

 
  <mx:RemoteObject destination="tuduService" id="service" /> 
  <mx:Panel width="250" layout="vertical" title="Spring Blaze DS Sample" horizontalAlign="center" verticalAlign="middle"> 
    <mx:VBox width="100%" horizontalAlign="center"> 
      <mx:DataGrid id="datagrid" dataProvider="{service.listAll.lastResult}" width="100%"/> 
      <mx:Button label="RemoteObject" height="50" click="service.listAll()" width="146" cornerRadius="20"/> 
      <mx:Spacer/> 
    </mx:VBox> 
  </mx:Panel> 

Pour rappel, l'attribut destination devant être celui définit (serviceId) dans l'exporter de la configuration Spring.

Et bingo, voici le résultat :

Conclusion

Ca donne un apercu de la simplicité d'utilisation de ce projet. Pour ma part, je verrai bien dans le futur un namespace flex, avec la possibilité d'exporter des services via annotation :

 
@FlexService(serviceId="tuduService") 
public class TuduServiceImpl implements TuduService{ 
 
  @Override 
  public List<Tudu> listAll() { 
    
    List<Tudu> result = new ArrayList<Tudu>(); 
    result.add(new Tudu("tudu1", "Récuperer Spring Flex", "FAIT")); 
    result.add(new Tudu("tudu1", "Faire un projet d'exemple Spring Flex", "EN COURS")); 
    result.add(new Tudu("tudu1", "Ecrire un billet sur mon blog", "A FAIRE")); 
 
    return result; 
  } 

Je vais d'ailleurs le proposer, du moins si ce n'est pas encore prévu !

Liens

=> Sources de mon exemple

=> Annonce sur le blog de Jeremy Grelle
=> Site du projet
=> Dépôt Subversion du projet Spring-Flex
=> Fisheyes
=> JIRA
=> Forum officiel

Social Bookmarking:

                                     

Commentaires, Pingbacks:

Connectez-vous pour vous abonner à cet article:

Flux de commentaires pour cet article : Atom 1.0  RSS 2.0
Commentaire de: Loic [Membre] · http://coffeebean.loicdescotte.com
Merci beaucoup c'est très intéressant!!
Permalien 19/12/08 @ 09:20
Commentaire de: Yoann.chambonnet [Membre]
Excellent article Hikage :)

j'ai récupéré tes sources pour tester tout ça et j'ai remarqué qu'il existait un répertoire "html-template". C'est "Flash-builder" qui l'a créé lors de la compilation?

Merci de partager toute ton expérience en tout cas!
Permalien 25/11/09 @ 12:30
Commentaire de: Hikage [Membre] · http://hikage.developpez.com
C'est Flex Builder qui te créer cela pour tout projet Flex.
Permalien 26/11/09 @ 12:24

Vous devez être identifié pour poster un commentaire.

Liste des blogs

Hikage

Gildas Cuisinier

Catégories


Rechercher

<  Mai 2011  >
Lun Mar Mer Jeu Ven Sam Dim
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

Syndiquez ce blog XML

Articles :

Commentaires :

 
 
 
 
Partenaires

Hébergement Web