Comment utiliser le SE-POJO (en 1 leçon)

Avez-vous entendu parler du SE-POJO ?

Son principal avantage : pouvoir assez simplement scripter en java des traitements internes à Petals, éventuellement complexes. Par exemple :

  • Consommer des Endpoint, les orchestrer librement en fonction de conditions.
  • Faire des traitements spécifiques (comme lire un fichier à un format exotique, le convertir en XML, et l’envoyer à un autre Endpoint)
  • Etc…

Le problème, c’est que le POJO est assez peu documenté, à ce jour : la doc est quand même utile, donc lisez-là (http://download.forge.objectweb.org/petals/petals-se-pojo-2.0.2-en.pdf).

Etape 1 : Développer un POJO compatible avec Petals et le SE-POJO

Sous PetalsStudio :

- Créer un projet java « classique », qui contiendra le code de votre POJO. Ce projet aura besoin de librairies de Petals, notamment celles du CDK (component development kit).

Le meilleur moyen de se les procurer, c’est de dézipper un composant : par exemple, téléchargez le SE-POJO (de toutes façons, vous en aurez besoin), et dézippez-le.

Les librairies dont vous aurez besoin sont les suivantes ([version] désigne les numéros de version, qui peuvent varier… selon la version ! Prenez celles qui sont dans votre composant POJO) :

  • petals-jbi-[version].jar
  • petals-cdk-jbidescriptor-[version].jar
  • petals-cdk-api-[version].jar
  • petals-cdk-core-[version].jar

Copiez ces librairies dans un répertoire de votre projet java (par exemple, un répertoire « lib/ »), et faites pointer le « Build path » d’Eclipse dessus.

- Créez un package et une classe dans les sources : ce sera l’implémentation de votre POJO.

Voici un exemple (cet exemple consomme un autre EndPoint : dans mon cas, un « FileTransfer » pour enregistrer le message, soit une SU déployée sur le BC-FILETRANSFER. Mais vous pouvez commenter tout le code qui consomme cet Endpoint, et vous contenter d’un POJO genre « Hello world » !) :


package org.ow2.petals.test;

import java.io.StringReader;

import javax.jbi.component.ComponentContext;
import javax.xml.namespace.QName;
import javax.xml.transform.stream.StreamSource;

import org.ow2.petals.component.framework.api.Message.MEPConstants;
import org.ow2.petals.component.framework.api.message.Exchange;
import org.ow2.petals.component.framework.jbidescriptor.generated.Consumes;
import org.ow2.petals.component.framework.listener.AbstractJBIListener;

public class TestPojo {
  AbstractJBIListener jbiListener;
  ComponentContext ctx;

  public void setJBIListener(AbstractJBIListener jbiListener) {
    this.jbiListener = jbiListener;
  }
  public void setComponentContext(ComponentContext ctx) {
    this.ctx = ctx;
  }

  public boolean onExchange(Exchange exchange)
  throws Exception {

    // Consume a "provides" endpoint (referenced by Interface/Service/Endpoint name,
    // as specified in the "provides" endpoint's jbi.xml)
    Consumes ep = new Consumes();
    ep.setInterfaceName(new QName("http://petals.test.com", "WriteContentInterface"));
    ep.setServiceName(new QName("http://petals.test.com", "WriteContent"));
    ep.setEndpointName("TestFileEndpoint");

    System.out.println("POJO: before consume");
    Exchange out =
       jbiListener.createConsumeExchange(ep,MEPConstants.IN_ONLY_PATTERN);
    out.setInMessageContent(
       new StreamSource(new StringReader(
         "<pojo>Hello from Pojo !</pojo>")));

    jbiListener.sendSync(out);
    System.out.println("POJO: consume done");

    // Answer if needed (In[Optional]Out)
    if(exchange.isInOutPattern() || exchange.isInOptionalOutPattern()) {
      System.out.println("POJO: sending response");
      exchange.setOutMessageContent(
         new StreamSource(new StringReader("<pojo>Ok</pojo>")));
    }

    return true;
  }

  public void init() {
    System.out.println("SamplePojo inits.");
  }
}

- Une fois votre POJO prêt, vous devrez le packager sous forme de fichier .jar (File/Export/General/Java/Jar file).
Le fichier .jar résultant pourra ensuite être intégré à votre SU POJO.

Etape 2 : Créer la SU pour y intégrer votre POJO

Sous PetalsStudio : File / New / Project / Petals / Use a Petals Technical Service / Use POJO.

Dans la fenêtre « WSDL File » (etc…)

  • Spécifiez des « namespace » identiques pour l’interface et le service (çà doit ressembler à des URL… exemple : http://pojo.test.org).
  • Nommez vos Interface / Service / Endpoint à votre convenance.
  • Inutile de spécifier un WSDL.

Dans la fenêtre « Jar Files » (etc…)

  • Donnez le chemin d’accès vers le jar créé lors de l’étape précédente (bouton « browse », sélectionnez le fichier jar)
  • Faites ensuite « Browse » pour la boîte « Service Class », vous pourrez y choisir la classe du POJO présent dans votre jar.

Terminez le processus (allez jusqu’à « Finish », et cliquez dessus).

PetalsStudio va alors générer un projet « su-POJO-<nom-du-projet>-provide, avec un dossier « resources/ » contenant le fichier jar du POJO, et un dossier META-INF contenant le descripteur de déploiement Petals (jbi.xml).

Attention : la version 1.0 Beta2 de PetalsStudio comporte un bug… à tout hasard, éditez META-INF/jbi.xml. Si vous y trouvez la chaîne suivante :

« http://petals.ow2.org/components/extensions/version-4.0″

remplacez « 4.0″ par « 5″, comme ceci :

« http://petals.ow2.org/components/extensions/version-5″

(puis sauvegardez).

Cliquez le projet avec le bouton droit, puis « Petals / Package for Petals ».

Vous aurez alors un fichier « sa-POJO-<nom-du-projet>-provide.zip », prêt à être déployé dans Petals (comme SU associée au SE-POJO).

Etape 3 : Déploiement sur Petals

  • Démarrez Petals
  • Déployez le SE-POJO
  • Déployez votre SU générée à l’étape 2 (sa-POJO-<nom-du-projet>-provide.zip).

Et voilà le travail !

One Response to “Comment utiliser le SE-POJO (en 1 leçon)”

  1. Super tutorial, je verrais bien « Comment utiliser le SE JSR181″ et la comparaison des deux.