network : antoine.guiral.info bertrand.guiral.info

Business Process Execution Language (BPEL): Ecrire un premier Web-Service avec netbeans

BPEL permet de manipuler des web-services (on dit composer ou orchestrer) et génère lui-même un web service, défini par un wsdl , qui lui même s’appuie sur des schéma (xsd).

Netbeans, le célèbre IDE gratuit de SUN permet de réaliser assez facilement une application, et de la déployer sur un serveur jbi Glassfish.

Nous allons essayer de construire une application de type "HelloWorld"



Cela passe par les étapes suivantes:

  1. Créer un schéma xsd
  2. Créer un wsdl
  3. Créer un bpel
  4. Déployer et tester

Il est impossible d’écrire des fichiers aussi complexes à la main. Il faut un outil: netbeans.

Ecrire un xsd (un schema)

  1. Créer un nouveau projet : new Project>SOA>BPEL Module
  2. Créer un nouveau schema: ProcessFils>New>XML schema donner un nom au fichier
  3. Rajouter un type complexe (ie : contactDetails)
  4. Dans la séquence de “contact”, rajouter des champs comme firstName, lastName, address, email … de type (existing type) String
  5. Rajouter une deuxièmme type complexe (ie : contactTitre), de type String celui ci (pour changer!)
  6. Rajouter 2 “elements”, des types complexes que nous avons définis précédemment

    Remarque: Vous pouvez définir des éléments de type “simple” (String par exemple) . Mais cela semble créer des problèmes …

Voilà le xsd sous sa forme xml:

  1.  
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  4.             targetNamespace="http://xml.netbeans.org/schema/mySchema"
  5.             xmlns:tns="http://xml.netbeans.org/schema/mySchema"
  6.             elementFormDefault="qualified">
  7.     <xsd:complexType name="ContactDetails">
  8.         <xsd:sequence>
  9.             <xsd:element name="firstName" type="xsd:string"></xsd:element>
  10.             <xsd:element name="lastname" type="xsd:string"></xsd:element>
  11.             <xsd:element name="email" type="xsd:string"></xsd:element>
  12.             <xsd:element name="address" type="xsd:string"></xsd:element>
  13.         </xsd:sequence>
  14.     </xsd:complexType>
  15.     <xsd:element name="aContactDetails" type="tns:ContactDetails"></xsd:element>
  16.     <xsd:complexType name="ContactSimple">
  17.         <xsd:simpleContent>
  18.             <xsd:extension base="xsd:string"/>
  19.         </xsd:simpleContent>
  20.     </xsd:complexType>
  21.     <xsd:element name="aContactSimple" type="tns:ContactSimple"></xsd:element>
  22. </xsd:schema>
  23.  

Ecrire un wsdl

  1. ProcessFiles>new>wsdl document
  2. Premier écran: Importer le schéma que nous venons de définir
  3. next
  4. définir les entrées et les sorties

Voila le wsdl sous sa forme xml:

  1.  
  2.     <?xml version="1.0" encoding="UTF-8"?>
  3. <definitions name="myWsdl" targetNamespace="http://j2ee.netbeans.org/wsdl/myWsdl"
  4.     xmlns="http://schemas.xmlsoap.org/wsdl/"
  5.     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  6.     xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://j2ee.netbeans.org/wsdl/myWsdl" xmlns:ns="http://xml.netbeans.org/schema/mySchema" xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
  7.     <types>
  8.         <xsd:schema targetNamespace="http://j2ee.netbeans.org/wsdl/myWsdl">
  9.             <xsd:import namespace="http://xml.netbeans.org/schema/mySchema" schemaLocation="mySchema.xsd"/>
  10.         </xsd:schema>
  11.     </types>
  12.     <message name="myWsdlOperationRequest">
  13. <part name="part1" element="ns:aContactDetails"/>
  14.     </message>
  15.     <message name="myWsdlOperationResponse">
  16. <part name="part1" element="ns:aContactSimple"/>
  17.     </message>
  18. <portType name="myWsdlPortType">
  19.         <operation name="myWsdlOperation">
  20. <input name="input1" message="tns:myWsdlOperationRequest"/>
  21.             <output name="output1" message="tns:myWsdlOperationResponse"/>
  22.         </operation>
  23.     </portType>
  24.     <binding name="myWsdlBinding" type="tns:myWsdlPortType">
  25.         <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
  26.         <operation name="myWsdlOperation">
  27.             <soap:operation/>
  28. <input name="input1">
  29.                 <soap:body use="literal"/>
  30.             </input>
  31.  
  32.             <output name="output1">
  33.                 <soap:body use="literal"/>
  34.             </output>
  35.         </operation>
  36.     </binding>
  37.     <service name="myWsdlService">
  38. <port name="myWsdlPort" binding="tns:myWsdlBinding">
  39.             <soap:address location="http://localhost:${HttpDefaultPort}/myWsdlService/myWsdlPort"/>
  40.         </port>
  41.     </service>
  42. <plnk:partnerLinkType name="myWsdl">
  43.         <!-- A partner link type is automatically generated when a new port type is added. Partner link types are used by BPEL processes.
  44. In a BPEL process, a partner link represents the interaction between the BPEL process and a partner service. Each partner link is associated with a partner link type.
  45. A partner link type characterizes the conversational relationship between two services. The partner link type can have one or two roles.-->
  46. <plnk:role name="myWsdlPortTypeRole" portType="tns:myWsdlPortType"/>
  47.     </plnk:partnerLinkType>
  48. </definitions>
  49.  

Créer un bpel

  1. ProcessFiles>new>bpel
  2. Dans la vue design, “Drag and drop” le fichier wsdl. Les positions où il peut se positionner sont sur les côtés
  3. “Drag And Drop” l’élément “receive” de la palette vers le centre design . Parfois la palette est invisible! click droit au centre du design Add From Pallette> Web Service > Receive
  4. Editer l’élément receive, lui donner un nom (myReceive), L’associer à un “Partner link”,à une opération, créer une variable “input”
  5. Mettre en place de la même manière l’élément “reply” sous l’élément “receive”. Définir une variable “output”
  6. Mettre en place un élément assign. (entre les éléments receive et reply)
  7. Sélectionner l’élément “assign” Choisir la vue “mapper”
  8. Sélectionner la variable output (celle dans laquelle on veut assigner une valeur)

voilà le xml correpondant:

  1.  
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <process
  4.     name="myBpel"
  5.     targetNamespace="http://enterprise.netbeans.org/bpel/bg_test_005/myBpel"
  6.     xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
  7.     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  8.     xmlns:tns="http://enterprise.netbeans.org/bpel/bg_test_005/myBpel" xmlns:ns0="http://j2ee.netbeans.org/wsdl/myWsdl" xmlns:sxt="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Trace" xmlns:sxed="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Editor" xmlns:ns1="http://xml.netbeans.org/schema/mySchema">
  9.     <import namespace="http://j2ee.netbeans.org/wsdl/myWsdl" location="myWsdl.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
  10. <partnerLinks>
  11. <partnerLink name="PartnerLink1" xmlns:tns="http://j2ee.netbeans.org/wsdl/myWsdl" partnerLinkType="tns:myWsdl" myRole="myWsdlPortTypeRole"/>
  12.     </partnerLinks>
  13.     <variables>
  14.         <variable name="MyWsdlOperationOut" xmlns:tns="http://j2ee.netbeans.org/wsdl/myWsdl" messageType="tns:myWsdlOperationResponse"/>
  15.         <variable name="MyWsdlOperationIn" xmlns:tns="http://j2ee.netbeans.org/wsdl/myWsdl" messageType="tns:myWsdlOperationRequest"/>
  16.     </variables>
  17.     <sequence name="Sequence2">
  18.         <sequence name="Sequence1">
  19.             <sequence>
  20.                     <receive name="Receive1" createInstance="yes" partnerLink="PartnerLink1" operation="myWsdlOperation" portType="ns0:myWsdlPortType" variable="MyWsdlOperationIn"/>
  21.                 <assign name="Assign1">
  22.                     <copy>
  23.                         <from>concat($MyWsdlOperationIn.part1/ns1:firstName, $MyWsdlOperationIn.part1/ns1:lastname, $MyWsdlOperationIn.part1/ns1:email, $MyWsdlOperationIn.part1/ns1:address)</from>
  24.                         <to variable="MyWsdlOperationOut"/>
  25.                     </copy>
  26.                 </assign>
  27.                 <reply name="myReply" partnerLink="PartnerLink1" operation="myWsdlOperation" portType="ns0:myWsdlPortType" variable="MyWsdlOperationOut"/>
  28.             </sequence>
  29.         </sequence>
  30.     </sequence>
  31. </process>
  32.  

Déployer et tester le projet sur le serveur

Remarquez qu’un projet BPEL n’est pas directement déployable.


Il doit être rajouté en tant que module JBI dans un projet “Application Composite” qui sera ensuite déployée.

Créer le projet “Application Composite” et rajouter les modules JBI:

  1. Depuis le menu principal : File > New Project
  2. Sémectionner le mode “Composite Application”
  3. Next
  4. Rajouter un nom, “finish”
  5. Ouvrir ce nouveau projet “Composite Application”. “Click Droit”. choisir “Add JBI Module” Sélectionner le jar du projet BPEL que vous voulez rajouter
  6. Remarquez qu’un jar a été rajouté dans le module JBI
  7. Sur le projet “Application Composite”, click droit, choisir “Deploy Project”
  8. Dans le projet “Composite Application”/Test, click droit et choisir “new test”
  9. Sur le test créé, click droit “run”

ressources

the other netbeans bpel tutorial


netbeans helloword application

Promouvoir cet article : Ces icônes sont des liens vers des sites de partage de signet sociaux où les lecteurs peuvent partager et découvrir de nouveaux liens.
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • blogmarks
  • BlogMemes
  • co.mments
  • e-mail
  • Live
  • Ma.gnolia
  • Scoopeo
  • Technorati
  • Wikio FR

Laissez un commentaire