Jun 20

Der folgende Artikel soll helfen einen BPEL Process mit Netbeans zu erstellen und auf den Glassfish Application Server zu deployen. Doch zunächste beschreibe ich kurz das vorhaben. Der BPEL Prozess nutzt insgesamt drei Web Services (YingService, YangService und MatchService). Der YingService benötigt keinen Parameter und liefert den String "Ying" zurück. Der YangService arbeitet analog zum YingService. Diese beiden Service arbeiten parallel! Der MatchService nimmt zwei Parameter vom Typ String entgegen und konkateniert diese beiden Strings und den String "Fit". Danach wird der zusammengesetzte String vom MatchService zurückgeliefert. Die einzelnen Web Services interessieren den Benutzer des BPEL Prozesses nicht, da dieser nach außen wie ein simpler Web Service (z.B. YingService) wirkt.

Nachdem das Ziel beschrieben ist kann die Arbeit beginnen. Ich habe sehr viele Screenshots verwendet um den Weg möglichst anschaulich zu machen.

Insgesamt werden 4 Projekte angelegt. Beginnen möchte ich mit einem Projekt, dass die einzelnen WebServices (YingService, YangService und MatchService) enthält, die dann im BPEL Prozess verwendet werden.

imageDazu legen wir einfach eine neue Web Application an und fügen anschließend die drei WebServices hinzu.

 

 

 

 

 

image

 

 

 

 

image

Jeder dieser WebServices hat jeweils eine Methode, die man über Add Operation hinzufügen kann. In dem dazugehörigen Dialog kann man sowohl Parameter als auch Rückgabetyp festlegen. In diesem Beispiel habe ich die Methoden sayYing(), sayYang() und concateStrings(String ying, String yang) genannt. Jede dieser Methoden gibt einen String zurück.

image

Das wiederholt man einfach noch für die anderen beiden Web Services.

 

 

 

 

image

Sind alle Web Services angelegt kann man sich daran machen ein BPEL Modul anzulegen. Dazu legt man ein neues Projekt an wählt im Dialog "SOA" und anschließend "BPEL Module".

 

imageIn diesem BPEL Module benötigt man nun noch einen BPEL Prozess, den man über "New" ganz einfach anlegen kann. Ich habe diesen Prozess ConcatProcess.bpel genannt.

 

 

image

Um diesem neuen BPEL Prozess die zuvor erstellten Web Services aus dem anderen Projekt bekannt zu machen, nutzt man den komfortablen Befehl „Generate and Copy WDSL“ in dem zuvor erstellten Projekt. Als Ziel wählt man ein Verzeichnis in dem BPEL Module. Ich habe dazu ein Verzeichnis "wsdls" angelegt.

 

 

 

 

 

 

 

 

 

 

image

Die Abbildung links zeigt den momentanen Stand in meinem BPEL Module. Wenn die *Wrapper.wsdls und die *.xsds bei euch noch nicht vorhanden sind, liegt es daran, dass ihr die WebServices noch nicht im Prozess verwendet habt. Diese Dateien werden aber automatische erzeugt und sollten euch nicht verwundern.

Bitte überprüft an dieser Stelle den Code der wsdl Dateien. Denn beim Kopieren wurde ein URL zurückgesetzt, die nun angepasst werden muss.

Der folgende Code zeigt das Problem. Die Adress Location soll mit der aktuellen Service URL ersetzt werden.

 

 

 

 

 

...


      
    
  
...
...


      
    
  
...

image

Nun öffnet man den ConcatProcess.bpel und geht in den Designer Modus. Doch bevor der Process mit Hilfe des Designers erstellt wird, legt man am besten noch ein WSDL Dokument an, dass den BPEL Prozess nach außen repräsentiert. image

Da der ConcatProcess keinen Eingabe-Parameter hat, kann man den Eintrag getrost entfernen.

image

In diesem Beispiel werden SOAP und der Binding SubType "RPC literal" verwendet.

 

 

 

 

 

 

 

image

In der Abbildung links sieht man erstmalig den Designer auf dem schon der Prozess zu sehen ist. Man kann nun munter die WSDL Datei auf solche Flächen ziehen, wie sie im  roten Kästchen zu sehen sind. Die drei WebServices (YingService, YangService und MatchService) zieht man auf die rechten graue Fläche und das gerade eben erstellte wsdl Dokument auf die linke graue Fläche.

image

Die linke Abbildung zeigt die Palette mit BPEL Elementen. Uns sollen nur die Element Invoke, Receive, Reply, Assign  und Flow interessieren.

 

image

Bitte positioniert die einzelnen Elemente wie links dargestellt in der Oberfläche. Um die Verbindungslinien zwischen den Elementen kümmern wir uns in den nächsten Schritten.

 

 

 

 

 

 

imageZuerst macht man einen Doppelklick auf das Receive Element und nimmt die links abgebildeten Einstellungen vor.

 

 

 

 

imageAls nächstes macht man ein Doppelklick auf eines der Invoke Element im Flow und erstellt einen Partnerlink zum YingService. Dazu erstellt man sowohl Input als auch Output-Variable. Den Vorgang wiederholt man für den YangService.

image

Nun klickt man auf das oberste Assign Element und ein Mapper öffnet sich. In solch einem Mapper kann man die Variablen zwischen zwei Elementen zuordnen. Da wir im Receive keine Variable erhalten haben, erstellen wir String Literale, den Variablen SayYingIn und SayYangIn zugeordnet werden.

image Bei dem nächsten Assign Element sind bereits Variablen vorhanden, sodass die Mapping Pfeile vom linken zum rechten Baum führen (siehe Abbildung links).

 

 

imageIm letzten Assign ordnet man die Output Variable des MatchService der Gesamt-Prozess-Output Variable zu, die man vorher im Dialog des Reply Elements erstellt.

 

 

 

 

imageAls nächstes legen wir ein neues Projekt (Composite Application) an, das später den BPEL Prozess benutzt.

 

 

 

 

 

imageIm nächsten Schritt fügen wir den erstellten Prozess der Composite Application hinzu. 

image

 

 

 

 

 

imageNach dem Hinzufügen des Prozesses sollte die Darstellung der Composite Application in etwas so aussehen.

 

 

 

 

imageNun kann es an das Deployment der einzelnen Projekte gehen. Zuerst sollte man den Glassfish Application Server starten. Ich nutze momentan noch den Server in der Version 2. Dieses Tutorial funktioniert aber auch mit der Version 3.

 

 

 

 

 

 

 

imageAls erstes wird das Projekt mit den drei einzelnen WebServices auf dem Server deployed. Dazu reicht ein rechtsklick auf das Projekt und Deploy. Das Deployment dauert einen Augenblick.

 

 

 

 

 

 

 

 

 

image

Das erfolgreiche Deployment überprüft man am besten in der Oberfläche des Glassfish Servers. Die erreicht man im Browser über localhost:4848. Die Anmeldedaten sind standardmäßig admin und adminadmin. Links unter Web Services sollten die Web Services zu sehen sein.

 

 

imageNun kann man die Composite Application deployen. Diese findet man dann in der Glassfish Oberfläche unter JBI / Dienstgruppen.

 

 

 

imageZum Testen der Composite Application erstellt man einfach einen WebService Client. In dem Dialog trägt man als WSDL URL das folgende ein:

http://localhost:9080/ConcatProcessService/ConcatProcessPort?wsdl

image

Danach sieht man den Client in der Projektstruktur. Wenn man den Baum so weit wie möglich öffnet sieht man die WebService Operation. Zieht man diese Operation mit der Maus in die main Methode sieht man den daraus entstehenden Code. Dieser Code gibt das Ergebnis der WebService Operation per println aus.

 

Ich hoffe dieses Tutorial hat euch geholfen einen BPEL Prozess zu erstellen und zur Ausführung zu bringen. Viel Spaß beim arbeiten mit BPEL!

Share and Enjoy:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • MisterWong.DE
  • Yigg

5 Responses to “BPEL mit Netbeans”

  1. weissbrotNo Gravatar says:

    Hallo!

    Super Tutorial! hat mir sehr weiter geholfen, ein Problem habe ich aber wenn ich den Client ausführe, er gibt irgendwie nix aus – wenn ich den StackTrace ausgebe kommt folgendes:

    javax.xml.ws.soap.SOAPFaultException: BPCOR-6135: A fault was not handled in the process scope; Fault Name is {http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/ErrorHandling}systemFault; Fault Data is <?xml version="1.0" encoding="UTF-8"?><jbi:message xmlns:sxeh="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/ErrorHandling&quot; type="sxeh:faultMessage" version="1.0" xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper"><jbi:part>HTTP Status-Code 404: Not Found – Not Found</jbi:part></jbi:message>. Sending errors for the pending requests in the process scope before terminating the process instance
    at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:178)
    at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:119)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
    at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
    at $Proxy21.concetenateProcessOperation(Unknown Source)
    at yingyangwebserviceclient.Main.main(Main.java:23)

    eventuell jemand eine idee woran das liegen könnte?

  2. weissbrotNo Gravatar says:

    @weissbrot
    hab wohl irgendwo eine falsche WSDL hinterlegt.. mittlerweile geht der Aufruf, nur scheinbar hats was mit der Variablen Übergabe nach sayYing und sayYang. Keine Ahnung was ich da verpfuscht habe ;-)
    habe aber mein erstes mini Beispiel für mein UniProjekt schon erledigt! ergo kann ich nur nochmals sagen: THX für dieses Tutorial!!!

  3. MikeNo Gravatar says:

    Hi,

    danke fürs Tutorial, hat mir im Verständnis sehr weitergeholfen.
    Leider bekomme ich im letzten Schritt bei Aufruf des Clients leider auch immer nur eine Fehlermeldung zurück und kriege nicht raus, woran es liegt.
    Könntest du evtl. den Sourcecode mit ins Tutorial packen.

    Danke und Gruß
    Mike

  4. very good information you write it very clean. I’m very lucky to get

    this info from you.

  5. SirupNo Gravatar says:

    I have the same issue as Weissbrot – Any Ideas?
    I redid the Tutorial now 3 times! Always the same error!

Leave a Reply

preload preload preload