Unterstützung der Fehleranalyse bei der Entwicklung von JSF Anwendungen
Wenn eine JSF Anwendung entwickelt wird liegt dem Entwickler viel daran mitzubekommen an welchen Stellen es hakt oder was für Daten bei einem Fehlerfall denn gerade in dem Request oder der Session liegen. So ist oft der erste Schritt das Einrichten von Log4J oder einer anderen Logging Engine um zumindest schon mal mitzubekommen welche Wege durchlaufen werden. Setzt man dann noch erweiternde Frameworks ein, welche eine bessere Fehleranalyse unterstützen, so kann man in der Entwicklung von JSF Anwendungen sehr gut unterstützt werden. Zwei solcher nützlichen JSF Erweiterungen sind Facelets und FacesTrace, worauf im folgenden kurz eingegangen werden soll.
Neben den vielen Vorteilen die Facelets mit sich bringt (Templating, Custom Tags, Html Unterstützung, …) bietet es auch eine verbesserte Fehleraufbereitung und zeigt bei Exceptions eine neue detailliertere Fehlerseite.
Auf dieser wird der Name der Exception bzw. die Ursache samt Zeilennummer des Aufrufs in der xhtml Seite dargestellt. Zudem werden sämtliche existierende Key/Value Paare aus allen Context Variablen und der JSF Komponentenbaum aufgelistet. Im folgenden Screenshot ist eine solche Fehlermeldung Fehlerseite im Aufbau zu sehen.

Auf den ersten Blick sieht man, dass in der Backing Bean LatestWishesCarouselBB in der Methode getCurrentViewedWishes() die Exception geschmissen wurde. Im Stacktrace ist dann zu erkennen, dass der Grund der Exception eine NullPointerException war.
Caused by: java.lang.NullPointerException at com.openwishes.presentation.bb.LatestWishesCarouselBB .getCurrentViewedWishes(LatestWishesCarouselBB.java:294)
Da Facelets valides xhtml verlangt sieht auch diese Fehlermeldung entsprechend aus.

Insgesamt kann man sagen, dass durch Facelets die Fehleranalyse deutlich vereinfacht wurde. Man kann auf den ersten Blick die Ursache erkennen und weitere Informationen einholen.
Die Faclets Fehlerseite muss man nicht direkt konfigurieren sondern wird automatisch durch das Einbinden von Facelets als View Hanlder verwendet.
<faces-config> <application> <view-handler> com.sun.facelets.FaceletViewHandler </view-handler> </application> </faces-config>
Mehr zum Einbinden von Facelets auch im Faclets Wiki.
Nützlich ist jedoch auch eine Analyse im Positiv-Fall, so dass man verschiedene Dinge analysieren kann. An dieser Stelle kommt FacesTrace ins Spiel.
FacesTrace ist ein “Tracing-Tool”, welches auf die Entwicklung von JSF Anwendungen zugeschnitten ist. So werden die sechs Phasen visuell dargestellt und und es ist die Ausführungsdauer der einzelnen Phase zu erkennen. Der folgende Screenshot zeigt, wie in der Phase “Validation” ein Fehler aufgetreten ist und anschließend direkt in die Phase “Render Response” gesprungen wird um Eingabemaske wieder darzustellen. Neben der visuellen Darstellung werden alle sämtlich verfügbaren Variablen die z.b. in dem Request, Session oder im Cookie verfügbar sind.

FacesTrace bietet somit einiges an nützichen Features, welche sehr der Analyse dienen. Als Features werden auf der FacesTrace seite folgende Punkte genannt:
- Performance Tracker
Die Dauer einer Phase wird gemessen und in den einzelnen Phasen angezeigt. - Lifecycle Tracker
Der JSF Lebenszyklus wird visuell dargestellt, wobei der Zustand einer Phase in verschiedenen Farben angezeigt wird. Grün: Phase wurde durchlaufen. Rot: Ein Fehler ist in dieser Phase aufgetretet. Grau: Phase wurde nicht durchlaufen. - Variables
Alle “Key-Value” Paare aus jedem verfügbaren Scope (Request, Session, Params, ..) werden aufgelistet - Faces Messages
Wenn Nachrichten (FacesMessages) im FacesContext verfügbar sind werden sie aufgelistet. - Logs
Mit FacesTrace ist es möglich die Log4J Ausgaben auf der Seite darzustellen. FacesTrace bringt einen eigenen Appender mit. - JSF Component Tree
Der Komponentenbaum der Seite wird dargestellt.
Um FacesTrace zu nutzen muss es natürlich noch konfiguriert werden. Das gestaltet sich aber relativ einfach, wie auch im Abschnitt Setup auf der FacesTrace Homepage zu lesen ist. Die FacesTrace Tag Library wird im FacesTrace.jar mitgeliefert und von Facelets automatisch gefunden. Man muss lediglich den Namespace “xmlns:ft=’http://facestrace.sourceforge.netÄ’” in einer xhtml Seite deklarieren:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:ft="http://facestrace.sourceforge.net">
Die FacesTrace Komponente kann dann an einer beliebigen Stelle auf der Seite platziert werden:
<ft:trace />
Möchte man FacesTrace ausschalten so kann man das über einen Context Parameter in der web.xml steuern:
<context-param> <param-name>com.prime.facestrace.DISABLE_TRACE</param-name> <param-value>true or false</param-value> </context-param>
Wie man bequem die web.xml für verschiedene Umgebungen anpassen kann und somit das Ein- und Ausschalten von FacesTrace nicht immer manuell umändern muss ist auf sophisticated-it zu lesen. Dort wird beschrieben wie man mit XSLT verschiedene Konfigurationen dynamisch zusammenbauen kann. Bei OpenWishes hat sich dieses Vorgehen bereits bewährt, so dass wir mit einer web.xml zwischen Lokaler-, Test- und Produktivumgebung ohne Probleme umschalten können.
Auch ohne das dynamische Anpassen der web.xml ist FacesTrace sehr einfach einzubinden und zu verwenden.
Die Kombination zwischen Facelets und FacesTrace bietet einen wirklichen Mehrwert bei der Entwicklung einer JSF Anwendung und vereinfacht die Fehleranalyse doch erheblich.
Wenn du Fragen oder Anregungen zum Post hast, dann hinterlasse doch ein Kommentar oder wenn du weiterhin Artikel von Javathreads lesen möchtest, dann abonniere den RSS Feed und sehe direkt in deinem Feed Reader die nächsten Artikel.














Kommentare
Bisher keine Kommentare vorhanden.
Hinterlasse ein Kommentar