Montag, 29. April 2013

OBTM: Proxy Service für BPEL-Prozess erstellen

Als letzte Komponente für unsere Business Transaction wird noch ein Proxy-Web Service erstellt, welcher den BPEL-Prozess aufruft. Der Startpunkt hierfür ist wieder der JDeveloper.


Hierfür können wir die bestehende HelloWorldServiceApp wiederverwenden. Über die Auswahlbox rechts vom Applikations-Namen bekommen wir ein Menü, dort 'New Project...' auswählen.


Hier links die 'Projects', rechts dann das 'Generic Project' auswählen und OK.


Bei den Project Technologies benötigen wir wieder die Web Services, welche automatisch Java nachziehen. Weiter mit Next und/oder abschliessen mit Finish.


Dann mit Rechtsklick auf das neue Projekt die 'New Gallery' aufrufen. Hier Web Services|Web Service Proxy auswählen und mit OK beenden.


Automatisch startet der Create Web Service Proxy Wizard, weiter mit Next.


JAX-WS als default stehen lassen und weiter mit Next ...


Jetzt muss der anzusprechende Service per WSDL benannt werden. Diese bekommt man z.B. im Enterprise Manager.


Hierzu wieder wie bereits im vorherigen Kapitel auf die Testseite des Composites navigieren. Gleich oben findet sich die WSDL-URL. Diese bitte Kopieren.


Die kopierte URL dann im JDeveloper einfügen, weiter mit Next...


Hier kann optional in Package Name vergeben werden, weiter mit Next...


Der Port Name wird bereits sinnvoll vorbelegt, die weiteren Optionen des Wizards werden für dieses Beispiel nicht benötigt. Beenden mit Finish.


Der JDeveloper erzeugt die benötigten Quellen für den Web Service Proxy und legt auch gleich einen Testclient an.


Der Testclient wird erweitert um die folgende Zeile

System.out.println( bPELProcess1.process( "Arne") );

wie oben dargestellt (natürlich kann der Name entsprechend personalisiert werden ;-)


Gestartet wird der Testclient wahlweise mittels Menü Run|Run HelloProxy.jpr, über den Button mit dem grünen Pfeil oder per F11. Wenn alles funktioniert, sollte die Begrüssung unten im Log auftauchen.

Diese komplexe Business-Funktionalität soll nun in einen Web Service verpackt werden.


Hierzu wird zunächst eine neue Java-Klasse benötigt. Erstellt wird diese z.B. durch Rechtsklick auf 'Application Sources' und 'New...'


Auswahl von Java|Java Class und OK


Hier bekommt die Klasse einen Namen, z.B. sayHelloProxy. Bei 'Constructurs from Superclass' und 'Implement Abstract Methods' können die Haken entfernt werden. Beenden mit OK.


Als Ergebnis liefert der JDeveloper die komplexe Klasse und öffnet sie im Editor. Hier muss jetzt der folgende Code ergänzt werden:

package helloProxy;

import java.util.Date;
import javax.jws.WebService;
import javax.xml.ws.WebServiceRef;

public class sayHelloProxy {
    @WebServiceRef
    private Bpelprocess1_client_ep bpelprocess1_client_ep;

    public String sayHello(String s)
    {
      bpelprocess1_client_ep = new Bpelprocess1_client_ep();
      BPELProcess1 bPELProcess1 = bpelprocess1_client_ep.getBPELProcess1_pt();
      // Add your code to call the desired methods.
      return new Date() + ": " + bPELProcess1.process(s);
    }
}

Das Ergebnis sollte dann wie folgt aussehen:



Damit ist die Geschäftslogik definiert. Damit der Proxy-Service irgendetwas tut, hängt er die aktuelle Systemzeit vor das Ergebnis.


Zum Erstellen des Web Services per Rechtsklick auf die sayHelloProxy.java (Achtung, Transferdenken: Dateiname stimmt nicht mit Screenshot überein) das Menü öffnen und 'Create Web Service...' auswählen.


Der default-Name passt üblicherweise, weiter mit Next...


Auch hier passen die Defaults so weit, weiter mit Next...


Die einzige Methode wird gefunden, die weiteren Optionen werden nicht benötigt. Beenden mit Finish.


Der JDeveloper hat die @WebService Annotation ergänzt. Die Datei kann geschlossen werden.


Jetzt muss der Service noch deployed werden. Hierzu wieder Rechtsklick auf das Projekt und Auswahl von Deploy|WebServices...


'Deploy to Application Server' und weiter mit Next...


Den richtigen Server auswählen und weiter mit Next...


Der Service wird nur auf einen Managed Server deployed, also Auswahl von 'Deploy to selected instances in the domain' und dann unten den richtigen Server auswählen. Weiter mit Next...


Zusammenfassung, beenden mit Finish.


Abwarten bis unten im Log '---- Deployment finished. ----' angezeigt wird.


Dann geht es weiter in der Weblogic Console. Hier unter Deployments den sayHelloProxyService lokalisieren und auf den Namen klicken.


Dann auf den Reiter 'Testing' gehen, den Baum aufklicken und auf den 'Test client'-Link klicken.


Einen Wert eingeben und den 'sayHello' Button klicken.


Unten sollte das Ergebnis inclusive des Datums vom Proxy-Service angezeigt werden. Damit OBTM etwas zu monitoren hat, per 'Re-Invoke' Button das ganze gleich ein paar Male wiederholen.


OBTM hat den neuen Service dann auch gleich gefunden und zeigt ihn entsprechend an.


Da wir jetzt nicht nur flache sondern kaskadierende Serivces haben, hat OBTM jetzt auch etwas zum anzuzeigen. In der Service Map werden die Abhängigkeiten korrekt angezeigt. Der BPEL-Prozess ruft den HelloWorldService auf und wird selbst sowohl vom Enterprise Manager, als auch vom sayHelloProxyService aufgerufen.
Dass OBTM diese Abhängigkeiten ohne weitere Konfiguration von alleine findet, ist eine der großen Stärken dieses Tools.


Auch die Container-Map hat jetzt etwas darzustellen, nämlich dass sich die Server auf Port 8003 (SOA-Server) und 8005 (JEE-Server) gegenseitig aufrufen. Ausserdem wird der SOA-Server vom Server auf Port 8001, dem Admin-Server auf dem der Test-Client läuft, aufgerufen.

Das OBTM hat damit die beteiligten Komponenten und ihre Zusammenhänge richtig erkannt, das Basis-Setup ist damit abgeschlossen.

Keine Kommentare:

Kommentar veröffentlichen

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.