Montag, 29. April 2013

OBTM: BPEL-Prozess für Hello-Service erstellen

Die Java-Container und der einzelne Service werden bereits automatisch vom Oracle Business Transaction Monitoring erkannt. Hierfür reicht aber auch ein normales System-Monitoring aus. Um wirklich eine komplexere Business Transaction zu monitoren, muss diese für dieses Handson Tutorial erst einmal erstellt werden.


Hierzu wird wieder im JDeveloper eine neue Anwendung erstellt.


Der Typ ist 'SOA Application', der Name z.B. soaApplication, Next.


Das Projekt bekommt den Namen soaProject1, die Project Technology SOA ist bereits ausgewählt -> Next.


Hier lässt sich gleich ein Composite mit einem BPEL-Prozess anlegen, beenden mit 'Finish'.


Der Prozess wird auf synchron gesetzt und als SOAP-Service exposed.


Wenn der Assistent fertig ist, öffnet sich gleich das SOA Composite. Hier wird per Drag&Drop ein Web Service hinzugefügt.


Daraufhin öffnet sich der Dialog mit den Details zum Web Service. Er bekommt einen Namen, z.B. helloService und dieWSDL. Diese kann über den 'Find existing WSDLs' Button hinzugefügt werden, oder auch einfach per Copy&Paste eingefügt werden, was in diesem Beispiel gemacht wird.


Die WSDL-URL bekommt man in der Weblogic Console im linken Baum unter Deployments. Dann auf der rechten Seite zum HelloWorldService navigieren und draufklicken.


Die Details vom HelloWorldService aufklicken und die WSDL-URL kopieren, z.B. im Firefox mit Rechtsklick und 'Copy Link Location'


Die URL wird dann in das Feld im Dialog eingefügt. Beim Verlassen des Feldes zieht der JDeveloper die Informationen aus dem WDSL-File. Da diese WSDL ohnehin nur einen Port Type hat, ist dieser gleich richtig voreingestellt. Beenden mit OK.


Dann wird der BPEL-Prozess mit dem Web Service verbunden indem vom ausgehenden Pfeil am BPEL-Prozess eine Verbindung zum helloService gezogen wird.


Das Composite sieht im Ergebnis dann so aus: ein Web Service, der einen einen BPEL-Prozess aufruft, der wiederum einen Web Service aufruft.


Weiter geht es im BPEL-Prozess, der per Doppelklick im Composite geöffnet wird. Hier wird eine Invoke Aktivität aus der Palette rechts zwischen receiveInput und replyOutput auf ein dort erscheinendes grünes (+) gezogen.


Dann wird die Invoke-Aktivität mit dem helloService verbunden, indem mit dem Pfeil von Invoke1 eine Verbindung zum HelloService gezogen wird.


Der Dialog mit den Details zum Invoke öffnet sich automatisch. Hier wird jetzt eine eingabe-Variable über das grüne Plus (+) hinzugefügt. 


Die default-Werte können so übernommen werden, beenden mit OK.


Der Wert wird entsprechend übernommen. Dann auf den Reiter 'Output' klicken und entsprechend mit der Output Variable verfahren. Dann mit OK schliessen.


Als nächstes wird eine Assign-Aktivität benötigt, die per Drag&Drop aus der Component Palette rechts zwischen receiveInput und Invoke1 gezogen wird.


Das Ergebnis sieht dann so aus. Per Doppelklick wird die Assign-Aktivität geöffnet.


Hier wird die dahinterliegende XSLT-Transformation konfiguriert, indem von der InputVariable des Prozesses der client:input String auf den arg0 String der InputVarialble des Invoke für den Web Service gezogen wird.


Als Ergebnis werden im unteren Bereich Quelle und Ziel der Kopieroperation angezeigt. Beenden mit OK.


Analog dazu wird eine zweite Assign-Aktivität zwischen Invoke1 und replyOutput gezogen.


Jetzt werden noch die Rückgabewerte gemappt. Vom return String der OutputVariable des Invoke1 wird kopiert auf den client:result String der outputVariable vom Prozess.


Das Ergebnis sieht dann wie oben aus. Die InputVariable vom Prozess wird kopiert in die InputVariable vom Invoke. Der Web Service wird aufgerufen, hinterher wird die outputVariable vom Invoke wieder kopiert in den ReturnValue vom Prozess.
Per 'Save All' Button kann alles gesichert,  das SOA-Composite und der BPEL-Prozess können geschlossen werden.


Jetzt muss das Composite noch auf den Application Server deployed werden. Per Rechtsklick auf den Projektnamen kann Deploy|soaProject1... ausgewählt werden.


'Deploy to Application Server' und Next ...


'Overwrite any existing ...' auswählen und Next ...


Den Application Server auswählen und Next ...


Der SOA-Server muss ausgewählt sein und weiter mit Next ...


Zusammenfassung, beenden mit Finish.


Abwarten, bis im Log "---- Deplyoment finished. ----" erscheint.


Dann wechseln in den Enterprise Manager der SOA Suite (z.B. http://hostname:8001/em) und das SOA-Projekt lokalisieren. Dort auf den Test-Button klicken.


Freundlicherweise bietet der Enterprise Manager gleich einen Stress Test für den Service an, hier den Haken setzen. Die default-Werte sind sonst OK. Unten muss noch ein Eingabestring vorgegeben werden, dann per 'Test Web Service'-Button starten.


Warten bis der Stress Test fertig ist, dann mit Close schliessen.


Dann wechseln ins OBTM. Der BPEL-Prozess mit seinen 50 Durchläufen wurde hier bereits registriert.
Damit ist der Grundstein für die Geschäftstransaktion in diesem Tuturial gelegt. Im nächsten Kapitel wird noch ein weiterer Service hinzugefügt.

---> Proxy Service für BPEL-Prozess erstellen

Montag, 8. April 2013

OBTM: HelloWorld WebService monitoren

Nachdem das OBTM jetzt so aufgesetzt ist, dass die beteiligten JEE-Container gefunden werden, soll jetzt ein einfacher WebService in den JEE_server_1 deployed und überwacht werden.
Sofern man einen passenden Service nicht schon zur Hand hat, kann ein HelloWorld-Service schnell mit dem JDeveloper generiert werden.


Dazu wählt man im JDeveloper 'New Application'.


Hier einen passenden Namen vergeben und Generic Application wählen und 'Next':


Das Projekt benötigt auch einen Namen. Dann Auswahl von 'Web Services', die Technologie 'Java' wird dann automatisch hinzugefügt. Weiter mit 'Next'.


Hier die Defaults belassen und mit Finish beenden. Der Dialog schließt sich danach.


Per Menüpunkt File|New wird die 'New Gallery' geöffnet. Dort Java|Java Class auswählen und mit 'OK' abschließen.


Hier nur den Namen ändern, z.B. auf 'HelloWorld' und 'OK'.


Die frisch definierte Klasse öffnet sich im Editor. Hier muß noch die 'Geschäftslogik' in Form einer der folgenden Methode ergänzt werden:

    public String sayHello (String s) {
        return "Hello " + s;
    }

Danach kann die Klasse gespeichert werden.


Dann im Application Navigator per Rechtsklick auf die Java-Source das Popup-Menü öffnen und 'Create Web Service ...' auswählen.


Defaults belassen und 'Next'


Defaults belassen und 'Next'


Defaults belassen und 'Next'


Die einzige Methode ist bereits vorausgewählt. Der Dialog kann mit 'Finish' vorzeitig beendet werden.


Der JDeveloper hat die Imports und die entsprechende Annotation ergänzt. Die Quelldatei kann gespeichert und geschlossen werden.
Als nächstes wird der Web Service in den überwachten Container JEE_server_1 deployed.


Hierzu wird per Rechtsklick auf das Projekt das Popup-Menü aufgerufen und Deploy|WebServices ausgewählt.


'Deploy to Application Server' und 'Next'


Falls der Server bereits in der Liste ist, kann er direkt genutzt werden. Falls nicht wird er über das grüne Plus (+) Symbol hinzugefügt.


Hier einen Namen für die Connection vergeben und 'Next'


Benutzername und Password eingeben und 'Next'


Verbindungsdaten eingeben und 'Next'


Zur Sicherheit ein Mal testen, dann mit 'Finish' beenden.


Falls die Domain schon vorher im JDeveloper hinterlegt war, bitte hier weitermachen. Jetzt wird auch der ggf. neu angelegte Server angezeigt. Diesen auswählen und weiter mit 'Next'.


Umschalten auf 'Deploy to selected instances in the domain' und den JEE_server_1 auswählen, weiter mit 'Next'


Zusammenfassung und 'Finish'


Dann warten bis im Deployment Log 'Deployment finished' erscheint. Danach kann der JDeveloper geschlossen werden.


Dann in der WebLogic Console unter Deployments den die eben deployte Anwendung finden, über die beiden Plus (+) Symbole aufklappen und auf den HelloWorldService klicken.


Auf dem Reiter 'Testing' dann wieder das Plus (+) vor dem HelloWorldService aufklappen und auf den 'Test Client' klicken.


Im Test Client dann einen beliebigen String eingeben und über den sayHello-Button starten.


Das Ergebnis wird angezeigt. Am besten über den 'Re-Invoke' Button das ganze mehrmals wiederholen damit OBTM etwas zu monitoren bekommt.


Dann geht es wieder zurück in die OBTM Console. Im Explorer unter 'Services to Endpoints' wird jetzt auch der HelloWorldService aufgeführt. Per Doppelklick auf die Operation sayHello werden weitere Informationen angezeigt. In meinem Fall waren es 6 Aufrufe mit Antwortzeiten zwischen 7ms und 34ms.

OBTM entdeckt also automatisch neue Services auf den per Observer überwachten Containern und erfasst die Laufzeitinformationen. Damit ist das Hello World Beispiel abgeschlossen, in den weiteren Teilen geht es um komplexere Szenarien.

---> BPEL-Prozess für Hello-Service erstellen

Freitag, 5. April 2013

OBTM: Observer für WebLogic Server installieren

Für den nächsten Schritt wird zunächst der Observer für WebLogic Server benötigt, der von OTN heruntergeladen werden kann. Der Observer sammelt die Metriken für die überwachte Komponente und meldet diese an den Monitor, welcher bereits mit der OBTM-Demoinstallation eingerichtet wurde.
Um überhaupt etwas zu monitoren zu haben, wird eine weitere Domain mit einer SOA-Suite benötigt. In diesem Beispiel heisst die Domain soa_domain, die SOA-Suite ist installiert in einen eigenen Managed Server namens soa_server_1. Die Installation der SOA-Suite wurde hier im FMW-Deutsch BLOG bereits beschrieben.
Ausserdem wird in der soa_domain ein weiterer Managed Server JEE_server_1 eingerichtet. Hierzu wird, sobald der Admin-Server gestartet ist, die WebLogic-Console aufgerufen unter http://host:port/console, z.B. http://oel6ab:8001/console.


Unter Environment/Servers kann über den Button 'New' ein neuer Managed Server angelegt werden.


Hier wird ein Name und ein freier Port vergeben, dann kann der Dialog direkt mit 'Finish' beendet werden.


Damit sind die per OBTM zu überwachenden Server eingerichtet. Im Anschluss werden alle Server der soa_domain heruntergefahren.


Als nächstes muss der WebLogic Observer installiert werden. Hierzu wird das von OTN heruntergeladene Archiv entpackt und der Inhalt nach  <MW_HOME>/wlserver_10.3 kopiert werden.


Dann wird in der Datei <MW_HOME>/user_projects/domains/soa_domain/bin/startWebLogic.sh geändert. Nach der Zeile

. ${DOMAIN_HOME}/bin/setDomainEnv.sh $*

wird folgendes ergänzt:

. ${WL_HOME}/nanoagent/bin/nanoEnvWeblogic.sh

Damit ist sichergestellt, dass mit den Weblogic-Servern auch die OBTM-Observer gestartet werden.


Nun muss dem Observer noch mitgeteilt werden, an welchen Monitor er seine Informationen senden soll. Hierzu wird die oben aufgerufene Datei nanoEnvWeblogic.sh editiert, welche sich im bin-Verzeichnis befindet, unterhalb des Verzeichnisses in das der Observer installiert wurde, also in meinem Fall z.B.

/home/oracle/Oracle/Middleware/wlserver_10.3/nanoagent/bin/nanoEnvWeblogic.sh

Die Variable NANOAGENT_CONFIGURATION_URL muss auf die Richtige URL gesetzt werden, abhängig vom eigenen Hostnamen und den Port auf den man den Server für OBTM installiert hat, wie in diesem Beispiel z.B:

NANOAGENT_CONFIGURATION_URL=http://oel6ab:7003/btmmonitor/agent/agent/

Danach werden alle Server der soa_domain wieder gestartet.


Nach dem Hochfahren erkennt OBTM die zu monitorenden Server, in diesem Fall alle mit 800x Portnummern.


Per Doppelklick auf einen Container können unter Explorer/Containers weitere Informationen angezeigt werden.


Ebenso können in der Container Map die Container sowie Detailinformationen angezeigt werden. Damit ist das Setup des WebLogic-Observers abgeschlossen.

---> HelloWorld WebService monitoren