Main Contents

Premiers pas avec Spring Integration

EAI, ESB, java

J’en avais déjà parlé (cf. Post du 21/01/09), et aujourd’hui je vous propose de faire vos premiers pas avec ce fabuleux framework : Spring Intégration.

Basé entièrement sur la documentation officielle ainsi qu’un post sur le blog de spring, cette première approche technique propose de réaliser un code java (simple) permettant d’envoyer et de récupérer un message (» hello world» ).

Avant de commencer, voyons un peu de théorie.

Spring Intégration est avant tout un framework basée sur le framework Spring, c’est à dire qu’il a pour vocation d’utiliser l’IoC (Inversion Of Control) et d’implémenter les principes d’intégrations. Pour compléter cette introduction je reprendrai les principes de la documentations officielle :

  • Fournir un model simple pour l’implémentation d’une solution d’intégration (EAI),
  • Faciliter la communication asynchrone dans une application basée sur Spring,
  • Utilisation simplifié pour les utilisateurs de Spring,
  • Fournir des composants faiblements couplés, réutilisables et testables,
  • Séparation des concepts entre la logique métier et la logique d’untégration.

Pour permettre ce type d’architecture, spring intégration repose sur un principe simple : pipes-and-filter. En effet les filtres (filter) représente tous les composants capable de produire ou consommer des messages et les tubes (pipe) représentent le transport entre deux filtres. C’est un résumé assez simpliste, mais vous le verrez par la suite qu’il n’est pas forcément utile de détaillé beaucoup plus.

Message et Message Chanel

Spring Integration propose une conception simple des messages : Objet Java + Méta-data. Cette architecture n’est pas sans rappeler la définition d’un message JMS.

http://static.springframework.org/spring-integration/reference/htmlsingle/images/message.png

Les « Message Chanel»  représentent les tubes (pipe) dans l’architecture pipes-and-filter. Un producteur/consommateur va utiliser ces tubes pour envoyer et recevoir les messages. Spring Integration propose sur ces « channel»  deux types de communication :

  • Point-to-Point (1 seul consommateur par message)
  • Publish/Subscribe (broadcast des messages)

http://static.springframework.org/spring-integration/reference/htmlsingle/images/channel.png

Le but du framework Spring Integration est de simplifier le développement d’une intégration d’entreprise (EAI), ce qui signifie qu’il faut un minimum de développement lors de l’implémentation d’un producteur ou consommateur, idem lors de la création de Message. Spring Integration met l’accent sur une modelisation simple Java basé essentiellement sur les POJOs. C’est le but des filtres, appelés également « Message Endpoint« . Le rôle premier de ces endpoints est donc de connecter une (ou des) application au framework.

Je ne vais pas rentrer dans la description des endpoints, je vous laisse le soin de lire la documentation.

Après cette courte introduction technique, je vous propose de mettre en pratique via un exemple concret, l’utilisation du framework. Comme je le disais en introduction, le but ici est simplement d’envoyer un message « hello world»  via un message channel.

Définition du contexte spring

Pour ceux qui sont familier avec Spring ce qui suit ne va pas vous poser de problèmes, pour les autres, je vous invite à lire la documentation spring afin de comprendre la notion de context. Ici nous utiliserons un context xml, bien qu’il soit possible d’utiliser les annotations.

<?xml version=« 1.0″ encoding=« UTF-8″?>
xmlns=« http://www.springframework.org/schema/beans» 
       xmlns:xsi=« http://www.w3.org/2001/XMLSchema-instance» 
       xmlns:si=« http://www.springframework.org/schema/integration» 
       xsi:schemaLocation=« http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/integration
           http://www.springframework.org/schema/integration/spring-integration-1.0.xsd» 
>


Dans le document xml ci dessus, nous retrouvons 2 éléments primordiaux pour la suite des développements :

  • la définition xsd des beans spring, ces avec cette description que nous pourrons définir correctement nos beans (http://www.springframwork.org/schema/beans/spring-bean.xsd),

  • la définition xsd du framework spring integration. C’est grâce à celle ci que nous définirons correctement l’eai (http://www.springframework.org/schema/integration/spring-integration-1.0.xsd).

Définition du « Message Channel» 

1
<si:channel id="channel" />

Je ne l’ai pas fais dans l’introduction, mais afin de comprendre la définition d’un channel, je vous conseil la lecture du chapitre 3.5 de la documentation Spring Integration : Configuring Message Channel.
Sachez simplement qu’ici nous définissons un (bean) transport identifié par l’id « channel»  dans notre application.


Définition de classe de Test

Afin de manipuler notre context définit plus haut, nous allons maintenant implémenter un bout de code Java chargeant le context et manipulant le channel.

1
2
3
4
5
6
7
public static void main(String[] args) {
     ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
     PollableChannel channel = (PollableChannel) context.getBean("channel");
     channel.send(new String("Hello World");
     Message<?> reply = channel.receive();
     System.out.println("message : " + reply);
}

Dans le petit bout de code ci dessus, nous manipulons un objet de type PollableChannel, pour plus de détail sur cette classe, je vous recommande de lire l’api, ou la documentation.

Comme vous pouvez le constater utiliser spring integration n’est pas sorcier. Bien évidemment les possibilités du framework sont immenses, et loin de moi d’avoir la prétention de vous présenter tout le framework. Il existe également d’autres introductions, plus complète du framework sur le web. Je vous recommande celle de Xebia, mais rien ne vaut la documentation officielle.

admin @ février 26, 2009

Laisser un commentaire


Feed