index.html
JBI - Tutorial
Ce tutorial accompagne la création d'une première application:
Il s'agit de surveiller un répertoire, et lorsqu'un fichier xml apparait dans ce répertoire, le déplacer vers un autre répertoire, et envoyer le contenu dans une queue JMS et d'en archiver une copie.
JBI Components
Les JBI Components (Binding Components et "Service Engine") sont des plug-ins qui rajoutent des fonctionnalités au "JBI Container".
Vous pouvez installer un "JBI Component" en le copiant dans le répertoire "hotdeploy".
Un "JBI Component" se compose d'un fichier zip, appelé aussi "Service Assembly" ou SA.
Un SA se compose:
- D'un fichier META-INF/jbi.xml
- De plusieurs fichier zip appelés SU (Service Unit) . Chaque SU contient au moins un fichier xbean.xml
Il est possible de regarder les Components déployés avec une console jmx (jconsole), d'arrêter ou de démarrer les SA.
Créer un SA (Service Assembly)
Créer un projet
Recopier ce pom.xml dans un directory vide.
Exécuter la commande:
Cela valide le fait que mvn est installé, et que le fichier pom.xml est correct.
ServiceMix fournit plusieurs archetypes Maven pour faciliter la création de projets.
Créer un projet SU (Service Unit) avec Maven et l'archetype "servicemix-service-unit"
Nous commencerons par utiliser l'archétype permettant de créer des SU (Service Unit)
Depuis le directory que nous avons créé, la commande suivante créera un "service unit" projet appelé "tutorial-file-su":
Mettre la version correspondant à la version de serviceMix.
Nous remarqons que le premier fichier pom.xml que nous avions écrit a été modifié, et qu'un nouveau répertoire a été créé, contenant un pom.xml.
Rajouter une dépendance pour un "component" JBI
Chaque SU (Service Unit) est detiné à être un "component" JBI. Nous spécifions cela dans le pom.xml , en rajoutant une dépendance au pom.xml.
L'outillage maven de servicemix fera le reste.
Le component "servicemix-file" fournit l'integration du JBI aux fichiers. Il peut être utiliser pour lire et écrire des fichiers, ou surveiller (poll) un répertoire.Il est décrit ici
Configurer le xbean.xml
Ensuite, nous aurons à configurer notre nouveau SU pour fournir réellement un service.
Nous faisons cela en créant un fichier appelé xbean.xml dans le répertoire src/main/resources
L'exemple définit 2 namespaces: Le prefixe "file" fait référence à un namespace pour adresser les fonctionnalités standard, tandis que le prefixe "tut" sera utilisé pour le namespace dans lequel notre service sera défini.
Définition d'un "file sender endpoint"
Un "file sender" peut être utiliser pour écrire des fichiers localement.
Voilà un exemple de "file sender":
Remarquez les 2 attributs service (Qui fait référence à l'ensemble du SU) et endpoint (Qui fait référence au sein du service , à cet interface file:sender).
Définition d'un "file poller endpoint"
Nous allons lire les fichiers XML dans un répertoire (spécifié par l'attribut "file", aussi veillez a ce que ce directory existe sur votre système )
La ligne XML ci-dessous est destinée à configurer un "poller", qui vérifiera la presence d'un nouveau fichier toutes les n secondes. Ce fichier sera envoyé au "file sender" endpoint spécifié par les attributs "targetService" et "targetEndpoint".
Le poller appartient au meme service que le "sender"; mais à un autre endpoint.Il a 2 attributs targetService et targetEndpoint qui désignent vers quelles applis seront envoyés les fichiers (Dans notre exemple,c'est le même service).
En résumé:
Vous spécifiez le component cible pour un SU comme une dépendance dans Maven ("dependancy" dans le pom.xml).
Dans ServiceMix, la pluspart des SU seront configurés par des fichiers xbean.xml
Créer le SA ("Service Assembly") avec Maven et l'archetype "servicemix-service-assembly"
De la même manière que nous avons créer notre SU avec un archetype Maven, nous allons créer notre projet SA .
Exécuter cette commande :
Un nouveau projet a été généré
Ajouté le SU dans le SA
Nous voulons ajouter le SU que nous avons créé au SA. L'outil Maven le fera automatiquement si nous mettons une dépendance dans le pom.xml du SA.
Nous avons à utiliser le groupId, l'artifactId et la version du SU ici:
Utilisons Maven pour construire l'ensemble:
Deployer le SA
Avant de commencer, assurez vous que ServiceMix est démarré.
Maintenant , naviguez dans le directory de votre SA, et utiliser le plugin JBI "Maven" pour déployer votre projet:
Tester le SA
Nous avons configurer notre SU "file" pour surveiller la presence de fichiers dans un directory, et les envoyer à un autre répertoire.
Copier juste un fichier xml dans le répertoire surveillé, et ServiceMix le déplacera après quelques secondes vers le "endpoint"
Rajouter 2 SU
A la place de simplement copier des fichiers depuis un directory vers un autre, nous allons maintenant envoyer un message vers une queue JMS. Nous voulons aussi archiver une copie du message en utilisant le pattern "wiretap".
En premier, nous avons à créer 2 projets supplémentaires pour nos 2 SU.
A la place d'utiliser le simple archetype "servicemix-service-unit" comme precedemment,nous allons utilser 2 nouveaux archetypes:
- "servicemix-eip-service-unit" pour créer le module "tutorial-eip-su"
- "servicemix-jms-provider-service-unit" pour créer le module "tutorial-jms-su"
Nous connaissons la syntaxe:
mvn archetype:create -DarchetypeArtifactId=XX -DarchetypeGroupId=org.apache.servicemix.tooling -DartifactId=YY
Ces archetypes sont un peu plus sophistiqué :
Ils ajoutent les < dependency > pour les components JBI qu'ils ciblent. Ils fournissent un xbean.xml pour démarrer.
Après cela, ajouter ces 2 nouveaux SU au SA en rajoutant les < dependency > au pom.xml du SA.
La documentation de serviceMix décrit comment utiliser jms : servicemix-jms.
Modifier le fichier xbean.xml de tutorial-jms-su, afin d'accéder à une queue appelée "queue/tutorial" sur ActiveMQ (qui est embarqué dans ServiceMix).
Configurer le "tutorial-eip-su"
Le "Servicemix-eip component" est un container "routeur" où plusieurs types de routage peuvent être déployés en tant que SU.
Modifier le fichier xbean.xml de "tutorial-eip-su" pour définir le "wiretap" que nous voulons.
Les différents pattern sont définis dans la doc de ServiceMix-eip
voici le shema du "wire-tap" pattern:
Nous voulons envoyer les messages au "jms endpoint", aussi, nous spécifions cette information au premier < eip:exchange-target/ >
Le deuxième fait référence au endpoint < file:sender /> que nous avons déclaré plus tôt.
Modifier la configuration de tutorial-file-su
Nous avons à modifier le "targetService" du endpoint < file:poller > pour réferrer à notre nouvellement créé "wiretap".
Cela pourrait être comme cela:
Construire et deployer
Quand tout est fait, vous étes prèt pour construire et deployer le SA.
Lors du build, les logs devraient ressembler à cela:
Test
Si vous copiez un fichier dans le directory surveillé par le "poller", il sera copié dans le directory "sender", comme avant.
Cependant, il devrait aussi y avoir une copie du message dans notre queue JMS.
Pour le controller, connectez vous à ServiceMix avec la console JMX et naviguez vers org.apache.activemq/localhost/Queues.
Une queue devrait avoir été créée avec le nom "queue/tutorial" et l'attribut "EnqueueCount" indique le nombre de messages qui ont déjà été envoyés.