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

Donnerstag, 28. März 2013

OBTM: Installation testen

Nachdem die Installation erfolgreich durchgelaufen ist, kann die OBTM-Anwendung aufgerufen werden unter <hostname>:<port>/btmui


Das Login kann hier über weblogic/password erfolgen.


Hieraufhin wird man mit der Initial Configuration begrüsst. Weiter mit 'Next'


Dann wird die zu verwendende Datenbank abgefragt. Während für Produktionsbetrieb unbedingt zu einer Oracle Datenbank zu raten ist, reicht für das Handson die Embedded Database aus.


Die Sphere URL wird bereits vorbelegt. Über den 'Test' Link ...


... lassen sich weitere Informationen anzeigen. Das Fenster mit dem SphereService Status wird aber zum jetzigen Zeitpunkt nicht benötigt und kann wieder geschlossen werden. Weiter mit 'Next'.


DNS Aliases werden für dieses Beispiel nicht benötigt, weiter mit 'Next'


Die URL für die Performance Monitoring Components ist auch bereits vorbelegt. Weiter mit 'Next'.


Von der Zusammenfassung wird die Einrichtung mit 'Finish' beendet.


Nach erfolgreichem Durchlauf zeigt sich zum ersten Mal die noch leere Übersicht von OBTM. Beim Klick auf 'Monitors' im Navigationsbaum links wird rechts bereits ein vorkonfigurierter Monitor Agent angezeigt. Per Doppelklick auf den Monitor Agent öffnet sich unten ein Fenster mit Detailinformationen.


Damit ist die Installation der Anwendung abgeschlossen.

---> Observer für WebLogic Server installieren

OBTM: Vorbereitung WLS und Installation OBTM

Für dieses Handson wird ein bereits installierter WebLogic Server benötigt. Es kann eine bestehende Domain verwendet werden oder eine eine neue erzeugt werden. Bei einer bestehenden Domain muss sichergestellt sein, dass die JRF (Java Runtime Facilities) installiert sind, da diese vom OBTM benötigt werden. In beiden Fällen erfolgt dies über das über das config.sh Script, zu finden unter <MW_HOME>/wlserver_10.3/common/bin.


Hier wird entweder eine neue Domain erstellt oder eine bestehende erweitert. Wichtig ist, dass die JRF mit ausgewählt sind.

Die Domain kann ansonsten mit standard-Einstellungen erstellt werden. Für dieses Beispiel wird eine neue Domain obtm_domain erzeugt, aber natürlich kann auch ein anderer Name verwandt werden.


Für OBTM muss ein eigener Managed Server eingerichtet werden in diesem Beispiel obtm_server_1. Danach kann der Domain Configuration Assistant geschlossen werden.


Der Management Server wird wie üblich gestartet via (<MW_HOME>/user_projects/domains/obtm_domain/startWebLogic.sh). Bevor der Managed Server gestartet werden kann, muss noch eine OBTM-spezifische Speicher-Einstellung vorgenommen werden, wie in der OBTM-Dolkumentation beschrieben.


Von den benötigten Einstellungen sind bei einem WLS 10.3.6 ohne alle gesetzt bis auf die MEM_MAX_PERM_SIZE_64BIT=-XX:MaxPermSize=256m. Diese findet sich in der setDomainEnv.sh unter <MW_HOME>/user_projects/domains/domain_name/bin. Danach wird der Managed Server gestartet via <MW_HOME>/user_projects/domains/obtm_domain/bin/startManagedWebLogic.sh obtm_server_1



Als nächstes muß das eigentliche OBTM in den WebLogic Server deployed werden. Dies erfolgt aus der WebLogic-Console. Dazu muss vorher das Installationspacket von download.oracle.com heruntergeladen werden und auf dem Server ausgepackt werden, idealerweise im Home-Verzeichnis des oracle-Users. Für dieses Beispiel wird die Demo-Variante verwendet.


Installiert wird OBTM über Deployments und Install


Hier wird zum ausgepackten btmDemo.ear navigiert, dann 'Next'.


Weiter mit 'Install this deployment as an application' und 'Next'


Als deployment target den obtm_Server_1 auswählen und weiter mit 'Next'


Defaults belassen und weiter mit 'Finish'


Danach sollte sich die btmDemo unter Deployments in der WLS Console wiederfinden.

---> Installation testen

Montag, 12. November 2012

MDS-01370: MetadataStore configuration for metadata-store-usage

Folgendes Problem hat mich gerade etwas Zeit gekostet: die SOA bzw. BPM-Suite startet nicht aufgrund folgender Fehler:

<Nov 12, 2012 10:01:50 PM CET> <Error> <oracle.mds> <BEA-000000> <
oracle.mds.lcm.exception.MDSLCMException: MDS-01330: unable to load MDS configuration document   
MDS-01329: unable to load element "persistence-config"
MDS-01370: MetadataStore configuration for metadata-store-usage "soa-infra-store" is invalid.   
MDS-01376: Unable to get database connection from data source "mds-soa" configured with JNDI name "jdbc/mds/MDS_LocalTxDataSource".    
weblogic.common.resourcepool.ResourceDeadException: 0:weblogic.common.ResourceException: Could not create pool connection. The DBMS driver exception was: IO Error: Socket read timed out


Danach gibt es dann die üblichen mehrseitigen Exceptions. Die Lösung fand sich dann im OTN Discussion Forum. Zusammenfassend half folgendes:

Auf der Datenbank:
conn / as sysdba
alter system set PROCESSES=500 scope=SPFILE;
alter system set open_cursors=500 scope=SPFILE;

startup force

Auf der Commandline:
set RCU_JDBC_TRIM_BLOCKS=TRUE (Windows)
bzw.
export RCU_JDBC_TRIM_BLOCKS=TRUE (Unix)

Und als letzten Schritt das RCU ($RCU_HOME/bin/rcu) neu laufen lassen. Das bestehende Repository löschen und mit den gleichen Parametern wieder anlegen.

Bei der Gelegenheit sollte vielleicht gleich -XX:+UseCodeCacheFlushing in der setSOADomainEnv.sh gesetzt werden, um den JVM-Fehler 'CodeCache is full. Compiler has been disabled' zu vermeiden. Eine sehr gute Beschreibung dazu findet sich hier.

Mittwoch, 4. April 2012

Glassfish Cluster Konfigurieren und Servlet deployen

Bislang lief das Beispiel-Servlet in einem ungeclusterten Glassfish Server. Jetzt soll das selbe Servlet im Cluster deployed werden. Hierzu muss zunächst ein Cluster über die Admin-Console (http://localhost:4848/common/index.jsf) konfiguriert werden.


Hierzu unter Clusters den 'New'-Button klicken


Im dem erscheinenden Dialog bekommt der Cluster einen Namen ("cluster1") und es können gleich zwei Instanzen (entsprechend den Managed Servern im WLS) angelegt werden. 'OK' beendet den Dialog.


Der Cluster muss vor der Benutzung  noch gestartet werden. Hierzu wird der Haken vor 'cluster1' gesetzt und via 'Start Cluster' der Cluster gestartet.


Per Klick links im Baum auf 'Clusters', dann rechts auf den Tab 'Instances' werden die beiden gerade konfigurierten Instanzen im Status 'Running' angezeigt.


Zurück in NetBeans wird zur Sicherheit ein kompletter Build des Projekts durchgeführt (Shift+F11).


Das Deployment auf den Cluster per GUI wird von NetBeans nicht unterstützt. Daher erfolgt das Deployment aus der Admin Console. Links im Baum auf 'cluster1', dann rechts auf den Tab 'Applications' und den Button 'Deploy' klicken.


Über den Browse-Button wird die .war-Datei ausgewählt, z.B. D:\Project\NetBeansProjects\SimpleCluster\dist\SimpleCluster.war. Der Type wird gesetzt auf 'Web Application'. Deployed wird mit 'OK'.


Die Anwendung 'SimpleCluster' wird jetzt unter 'Applications' angezeigt. Per Klick auf den Anwendungsnamen geht es in die Details.


Hier werden weitere Details zu der Web-Application angezeigt. über den 'Launch'-Link lässt sich die Anwendung ausführen.


In einem neuen Browser-Fenster werden die verschiedenen Links zur Anwendung angezeigt. Per Klick auf einen davon gelangt man auf die jeweilige Seite.


Es wird zunächst die Default-Seite index.jsp angezeigt. Um auf das Servlet zu kommen, wird an die URL der Name des Servlets angehängt, in diesem Fall ist die komplette URL also http://localhost:28080/SimpleCluster/Simple.


Über mehrmaliges Neuladen werden die bisherigen Aufrufe hochgezählt.


In einem zweiten Browser kann die gleiche URL auf dem Port der jeweils anderen Instanz geöffnet werden. Somit lassen sich beide Zähler unabhängig voneinander hochzählen.

Damit ist der Glassfish-Cluster aufgesetzt und die Anwendung in beide Instanzen deployed.

Das Loadbalancing über den Apache funktioniert grundsätzlich analog zum Loadbalancing des WebLogic Server. Allerdings ist das mod_loadbalancer.so des Glassfish Servers zwar bereits für den Oracle HTTP Server zertifiziert, es gibt aber noch keine automatisierte Installationsroutine.
Die manuelle Installation ist beschrieben unter http://docs.oracle.com/cd/E18930_01/html/821-2426/gktke.html#scrolltoc, aber nicht Bestandteil dieses Tutorials.