Sollten während einer OData-Request-Verarbeitung Fehler auftreten, werden aus Sicherheitsgründen
keine Fehlerdetails an den Client zurückgegeben. Stattdessen wird je nach Art des Fehlers eine Antwort
mit einem entsprechenden HTTP-Fehlercode generiert. Tritt der Fehler innerhalb der
Businesslogik
auf, so enthält das Portal-Server-Log unter Umständen detaillierte Fehlermeldungen. Sollte der Fehler aber
schon zu Beginn der Request-Verarbeitung auftreten, gibt es zur Analyse nur die Möglichkeit, den
detaillierten Fehlerbericht in die Antwort an den Client einzubetten. Dazu muss die Log4j-Konfiguration
des Intrexx-Portal-Servers so angepasst werden, dass als Log-Level für das OData-Producer-Modul "DEBUG" anstatt
"INFO" verwendet wird. Öffnen Sie die Datei log4j.properties im Portalverzeichnis internal/cfg
in einem Texteditor. Suchen Sie in der Datei nach der Zeile "OData Producer" und ändern Sie in der nächsten Zeile den Wert
INFO zu DEBUG. Nach dem Speichern der Datei muss der Portal-Server neu gestartet werden, um die detaillierten Fehlermeldungen zu
aktivieren.
1.1.2. OData-Konsument
Sollten während eines OData-Requests Fehler auftreten, versucht Intrexx die Fehlermeldungen aus der Antwort
des Services zu ermitteln und im Browser anzuzeigen. Dies ist nicht immer in allen Fällen möglich. Für eine
detailliertere Fehleranalyse bietet es sich deshalb an, das OData-Request-Tracing im Intrexx Portal-Server zu
aktivieren.
1.2. Request-Tracing und Fehlerprotokollierung
Bei aktiviertem Request-Tracing werden sowohl die OData-Requests als auch Responses im Detail in die
Intrexx-Portal-Logdatei geschrieben. Für Requests besteht ein Eintrag aus der HTTP-Aktion, der URL,
den Query-Options, den Request-Headern und dem XML-Body. Bei Antworten werden die HTTP-Header und der
Response-XML-Body ausgegeben. Aktiviert wird das Tracing wie folgt:
Um für den OData-Provider eine detaillierte Protokollierung in eine Logdatei zu aktivieren, öffnen Sie
die Datei "portal.wcf" im Portalverzeichnis internal/cfg
und fügen dem Abschnitt "Java Additional Parameters" folgende Zeile hinzu:
Ersetzen Sie dabei <intrexx> und <portal> mit den Werten Ihrer Portalumgebung und führen Sie
nach dem Speichern der Datei einen Neustart des Portal-Servers
durch. Anschließend werden die OData-Anfragen inklusive Inhalt protokolliert. Weitere Einstellungen können in der
Datei "logging.properties" vorgenommen werden.
1.3. Nicht unterstützte OData-Funktionen
Während Intrexx-Unterstützung für alle wesentlichen Funktionen der OData-Spezifikation Version 2.0 anbietet,
kann es unter Umständen vorkommen, dass ein Service bestimmte Funktionen nicht unterstützt. In diesem Fall kommt
es entweder zu einem Fehler oder eine Abfrage liefert nicht das erwartete Ergebnis. Da die OData-Spezifikation den
implementierenden Diensten einen relativ großen Spielraum bietet, was die Unterstützung von Features betrifft, kann
in einem solchen Fall nur die Intrexx-Applikation angepasst werden, so dass nur vom Service unterstützte Funktionen
verwendet werden. Beispiele für solche Fälle sind Filterdefinitionen, Seitennavigation (Pagination) oder Sortierung. Über die
entsprechenden Expert-Settings
lassen sich problematische OData-Features deaktivieren. Falls bestimmte Filterdefinitionen nicht unterstützt werden,
muss der Filter in Intrexx entsprechend angepasst bzw. vereinfacht werden.
1.4. SSL-Verbindungen
Für SSL-Verbindungen zwischen dem Intrexx-Portal-Server und einem OData-Service muss das Zertifikat der Certificate
Authority, die das Service-Zertifikat ausgestellt hat, dem Zertifikatsspeicher des Intrexx-Portal-Servers hinzugefügt
worden sein. Eine Ausnahme bilden selbstsignierte Zertifikate, die nicht von einer bekannten Certificate Authority ausgestellt wurden.
Um SSL-Verbindungen zu Diensten mit selbstsignierten Zertifikaten zu ermöglichen, muss in diesem Fall im Intrexx-Portal-Server
die Prüfung der Certificate-Chain deaktiviert werden. Dies ist auf Service-Ebene über eine System-Property möglich.
Öffnen Sie die Datei "portal.cfg" im Portalverzeichnis internal/cfg
mit einem Texteditor und fügen Sie dem Abschnitt <environment> einen neuen <systemProperty>-
Eintrag hinzu:
<systemProperty name = "de.uplanet.lucy.server.odata.consumer.ssl.allowSelfSignedCerts.<SERVICE_GUID>;" value="true"/>
Der Platzhalter <SERVICE_GUID> ist mit der GUID des OData-Services zu ersetzen. Die
GUID können Sie der Service-Konfigurationsdatei im Portalverzeichnis
internal/cfg/odata entnehmen. Nach dem Speichern der portal.cfg-Datei muss der Intrexx-Portal-Server-Dienst
neu gestartet werden, damit die Änderungen wirksam werden.
1.5. Beenden von Intrexx-OData-Sessions
Intrexx-Sitzungen, die über den OData-Provider eröffnet wurden, werden entweder durch einen automatischen Timeout oder auf
Anfrage des Clients beendet. Im Fall von Timeouts wird zwischen anonymen und authentifizierten Sitzungen unterschieden.
Standardmäßig wird für anonyme Sitzungen ein Timeout von 60 Sekunden verwendet, bei Benutzersitzungen wird die Sitzung nach
10 Minuten ohne Aktivität automatisch beendet. Beide Timeout-Varianten können über eine System Property eingestellt werden.
Um die Default-Werte zu ändern, können in der Datei "portal.cfg" im Portalverzeichnis internal/cfg
dem Abschnitt "environment" zwei neue <systemProperty> Einträge hinzugefügt werden:
Bitte beachten Sie, dass die Werte für den Session-Timeout in Millisekunden anzugeben sind. Die Änderungen werden
nach einem Neustart des Portal-Dienstes übernommen.
Die zweite Möglichkeit zum Beenden einer Sitzung besteht in einem Logout-Request durch den OData-Client. Dazu sendet der Client
einen Request an den Server, wobei der URL mit dem Pfad $logout enden muss. Mit der im HTTP-Header
als Cookie angegebenen Session-ID wird die Intrexx-Session identifiziert und automatisch beendet.
2. Anhang
2.1. OData-Spezifikation
Eine Beschreibung des OData-Protokolls sowie die OData-Spezifikation erhalten Sie
hier.
2.2. OData-Tools
Folgende Tools haben sich bei der Anwendungserstellung und Problemanalyse als hilfreich erwiesen:
Firefox RESTClient
Mit diesem Firefox-Plugin, das Sie hier
herunterladen können, lassen sich OData-Requests innerhalb des Browser ausführen und
analysieren. Dies bietet sich vor allem für eine Fehleranalyse an. Dazu kann aus dem Intrexx-portal.log
bei aktiviertem Request-Tracing der OData-HTTP-Request kopiert, im REST-Client ausgeführt
und im Fehlerfall angepasst werden, um nicht unterstützte Funktionen zu vermeiden.
LinqPad
Mit LinqPad, das Sie hier
herunterladen können, lassen sich Abfragen auf einen OData-Service mit der Abfragesprache Linq ausführen und visualisieren.
Silverlight-OData-Explorer
Ein weiteres Tool zur Ausführung und Analyse von OData-Abfragen im Browser (benötigt Microsoft-Silverlight-Plugin),
das Sie hier herunterladen können.
Microsoft Visual Studio 2010
Mit der Entwicklungsumgebung Visual Studio 2010 von Microsoft lassen sich mit geringem Aufwand eigene
OData-Services auf Basis bestehender Datenbanken generieren und über den Microsoft Internet Information
Server bereitstellen. Hier
können Sie sie herunterladen.
2.3. Reverse-Proxy-Konfiguration
Aus technischen Gründen ist es derzeit nicht möglich, Portal-Server als auch OData-Services unter dem gleichen
TCP-Port zu betreiben. Daher muss für Intrexx-OData-Services ein anderer Port als der Standard-HTTP-Port 80
(bzw. 443 für SSL-Verbindungen) gewählt werden, wenn das Portal unter diesem erreichbar sein soll. Um sowohl
den Portal-Server als auch OData-Services unter einem einheitlichen Port zu betreiben, bietet sich der Einsatz
eines Reverse-Proxys an. Dabei handelt es sich um einen vorgeschalteten Webserver, der Benutzeranfragen empfängt
und auf Basis eines Regelwerks an das entsprechende Backendsystem weiterleitet. Es gibt verschiedene freie und
kommerzielle Reverse-Proxy-Lösungen. Beispielhaft wird im Folgenden eine Implementierung mit dem freien und kostenlosen
Webserver Nginx beschrieben. Es wird dabei davon ausgegangen, dass sowohl Nginx als auch der Intrexx-Portal-Server auf dem
gleichen physischen Server installiert sind und das Portal unter dem Port 8080 und OData-Services unter Port 9090 erreichbar
sind. Die aktuelle Nginx-Version können Sie unter http://nginx.org beziehen.
Nach dem Entpacken der Downloaddatei befindet sich die Konfigurationsdatei nginx.conf im Unterordner
/conf. Ersetzen Sie diese mit folgender Beispielkonfiguration (eine Kopie der Datei befindet sich im
Installationsverzeichnis adapter/odata/nginx).
Passen Sie die Konfigurationsdatei gegebenenfalls Ihrer System-/Netzwerkumgebung an und speichern Sie die Datei.
Anschließend kann der Nginx-Server über die Datei nginx.exe im Hauptverzeichnis gestartet
werden. Testen Sie die Erreichbarkeit des Intrexx-Portals sowie der OData-Services unter der einheitlichen Adresse mit
Port 80. Nun sollte noch sichergestellt werden, dass eingebettete URLs in OData-Dokumenten (wie z.B. Links zu in Beziehung stehenden
Datensätzen) den korrekten Endpoint-URL enthalten. Normalerweise wird für die URLs der Name und Port des OData-Servers verwendet.
Dieser weicht beim Einsatz eines Reverse-Proxys aber vom Endpunkt-URL ab. Daher wird ein dynamischer Mechanismus benötigt, der zur
Laufzeit die korrekte Endpunkt-URL für OData-Adressen verwendet. Um dies zu erreichen, sendet der Reverse-Proxy-Server seinen Hostname
und Port über spezielle Request-Header (X-Forwarded-*) an das Backend-System. Dieses kann die Header auslesen und damit den für Clients
relevanten URL bilden. Um den Mechanismus zu aktivieren, gibt es in der
OData-Server-Konfiguration den
Parameter "Host". Tragen Sie hier entweder [X-Forwarded] ein, um den Host aus den Request-Headern zu ermitteln,
oder geben Sie direkt den Hostnamen und Port im Format hostname:port des Reverse-Proxys an
(wodurch Header-Werte überschrieben werden).