Oracle Fusion Middleware Blog

Deutsche Informationen rund um Oracle Fusion Middleware

Remote Debugging von WSRP Portlets in Oracle WebCenter

leave a comment »

Vorstellung der Beispielanwendung Flugauskunft

In diesem Blog möchte ich an einem Beispiel erläutern, wie man ein Remote Debugging eines Portlets im JDeveloper durchführt. Schauen wir zuerst auf eine kleine Beispielanwendung, an Hand derer das Debugging erläutert werden soll.

Beispielanwendung ListTours

Beispielanwendung Flugauskunft

Wir sehen eine einfache WebCenter JSF Page, auf der oben ein Suchportlet und unten ein Ergebnisportlet eingebettet und über die JSF Seitendefinition miteinander gekoppelt sind (Interportlet Kommunikation). Das obere Portlet ist ein Parameterportlet aus der Bibliothek der fertigen WebCenter Portlets. Das untere Portlet ist eine JSP mit einer Java Klasse zur Ausgabe von Flugdaten. Portlets und Portalseite sind physich voneinander getrennte Anwendungsfragmente und auf zwei Application Server verteilt. Zur besseren Verdeutlichung sei hier ein Schaubild des Aufbaus dargestellt.

Applikationsarchitektur ListTours

Applikationsarchitektur Flugauskunft

Das Portlet ListTours.jsp wird per WSRP Request (HTTP) von der Portalseite Tours.jspx aufgerufen. Gehen wir davon aus, dass der Entwickler die Java Klasse TourData des Portlets debuggen muss, um einen Fehler zu finden. Das Problem besteht darin, dass das Portlet ListTours.jsp nicht direkt ohne Mitgabe eines Portalkontexts gestartet werden kann. Das heißt man muss über den gesamten Portalkontext die Applikation auf Funktionsfähigkeit überprüfen und ggf. debuggen. Im Prinzip unterscheidet sich ein Portlet Remote- Debugging nicht wesentlich von einem herkömmlichen Remote-Debugging, wie es in der Dokumentation zum JDeveloper beschrieben ist. Man muss nur beachten, dass das Portal eine definierte Zeit auf Anwort des Portlets wartet (Timeout). Wird aber ein Debugging des Portlets vorgenommen, dann hält die Abarbeitung der Portletlogik an, das Portal wartet aber weiter auf Antwort. Nach der in der Providerregistratur definierten Wartezeit wird der Portletrequest vom Portal (hier Tours.jspx) abgebrochen mit der entsprechenden Abbruchmeldung. Das kann je nach funktionalen Abhängigkeiten zu anderen Portlets oder Seitenkomponenten zu unerwünschten Nebeneffekten auf der Portalseite führen. Daher sollte in den Vorbereitungen zum Debuggen die Portlet Request Timeout Zeit in der Provider Registratur der  Webcenter anwendung sehr hoch eingestellt werden, damit das Portal, also WebCenter, genug Zeit zum Debuggen zuläßt, ohne abzubrechen. Die Vorgehensweise des Remote-Debuggings sei hier nocheinmal im Ganzen beschrieben.

Starten des Portletcontainers im Remote Debug Modus

Der J2EE Container, der das Flugauskunftsportlet ListTours.jsp enthält, ist hier der „pre-seeded OC4J“, welcher automatisch in der JDeveloper Studio Edition ab 10.1.3.2 enthalten ist. Start und Stop dieses Containers wird über ein Shellscript als „external Tool“ ausgeführt. Um den Debug Modus beim Starten dieses Containers zu aktivieren, muss in dessen Startscript %JDEV_HOME%\extensions\oracle.adfp.seededoc4j.10.1.3\bin\adfp_oc4j.cmd die Zeilen 223 und 231 mit dem OC4J Startbefehl von


:oc4j
if /I „%VERBOSE%“==“on“ (
echo Executing: %JAVA_HOME%\bin\java %JVMARGS% -jar „%OC4J_JAR%“ %CMDARGS%
echo.
)
if not EXIST %OC4J_JAR% (
echo Error: Can not find %OC4J_JAR%.
goto end
)
%JAVA_HOME%\bin\java %JVMARGS% -jar %OC4J_JAR% %CMDARGS%
goto end

nach


:oc4j
if /I „%VERBOSE%“==“on“ (
rem echo Executing: %JAVA_HOME%\bin\java %JVMARGS% -jar „%OC4J_JAR%“ %CMDARGS%
echo Executing: %JAVA_HOME%\bin\java %JVMARGS% -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4000 -jar %OC4J_JAR% %CMDARGS%

echo.
)
if not EXIST %OC4J_JAR% (
echo Error: Can not find %OC4J_JAR%.
goto end
)
rem %JAVA_HOME%\bin\java %JVMARGS% -jar %OC4J_JAR% %CMDARGS%
%JAVA_HOME%\bin\java %JVMARGS% -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4000 -jar %OC4J_JAR% %CMDARGS%

goto end

geändert werden. Wie man sieht, soll für die Kommunikation zwischen JDeveloper und externem Portletcontainer der Port 4000 verwendet werden. Das muss man dem Remote Debugger des JDevelopers mitteilen.

Einstellungen auf Projektebene im JDeveloper

Im Projekt mit den Portlet Sources (ListTours.jsp und Tourdata.java) muss nun noch der Debugger mit dem Kommunikationsport 4000 des Portletcontainers zusammengebracht („attached“) werden. Dazu bitte mit rechter Maustaste auf Portletprojet -> Project Properties -> Run/Debug -> Run Configurations „Default“ ->Edit gehen. In dem sich öffnenden Fenster bitte auf Remote Debugger klicken und die Einstellungen wie folgt vornehmen.

Einstellungen Remote Debugger

Einstellungen Remote Debugger

Selbstverständlich wird hier unter Host der aktuelle Hostname des Portlet Containers eingetragen.

Portletrequest Timeout erhöhen

Die Registratur des Portletproducers sollte wie oben bereits erwähnt mit einer sehr hohen Timeout Zeit versehen werden. In WebCenter sind alle Portletproducer der Applikation unter „Portlet Producers“ aufgelistet. Bitte diesen Zweig öffnen, mit der rechten Maustaste auf den betreffenden Producer klicken und Edit anwählen (hier im Beispiel „Veeva Producer“).

Aufruf Portlet Producer Registratur

Aufruf Portlet Producer Registratur

Im sich öffnenden Producer Registratur Fenster bitte auf Registration Details klicken und die Timeout Zeit erhöhen.

Portlet Produer Timeout

Portlet Produer Timeout

Starten des Remote Debuggers

Im JDeveloper oben in der Menüleiste die grüne Ampel anwählen und somit den „preseeded OC4J“ (mit dem Portlet ListTours.jsp) starten. Im Message Fenster müsste zu sehen sein, dass der Container auf Port 4000 hört. Zur Kontrolle kann man noch in einer DOS Shell durch netstat –a sehen, ob der Port 4000 in Gebrauch ist. Nun kann man im Projekt Portlets in der entsprechende Klasse die gewünschten Breakpoints setzen und den Remote Debugger (roter Käfer in der Menüleiste) starten. Dieser verbindet sich auf den Port des Portletcontainers. Abschließend wird die Portalseite, hier Tours.jspx, normal gestartet (rechte Maus -> Run) und in dem Monent, wo das Portlet ListTours.jsp angefordert wird, mdeldet sich der Debugger im JDeveloper und man kann sich den Stack ansehen

Breakpoints setzen

Breakpoints setzen

Nun müssen Sie nur noch den Fehler finden. Viel Erfolg. <DM>

Written by fmtechteam

19/09/2008 um 16:01

Veröffentlicht in Detlef Müller, WebCenter

Tagged with

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: