|
APEX-Webserver: Apache, Embedded Gateway oder J2EE Listener
Seit der Freigabe von APEX 4.0
gibt es drei Alternativen für den Betrieb des APEX-Webservers.
In diesem Tipp stellen wir Ihnen die drei Varianten mitsamt ihrer Besonderheiten bei
der Installation vor. Bevor man jedoch mit dem Einrichten startet, stellt sich natürlich
die Frage, welchen Webserver man nutzen sollte.
Bei Nutzung des PL/SQL Embedded Gateway wird
die Aufgabe des Webservers von der
Datenbank und dem Listener selbst übernommen - auf dem Datenbankrechner werden also
keine weiteren Prozesse benötigt. Insofern ist der Setup sehr einfach und die
Administration des Webservers ist mit der normalen Datenbankadministration abgedeckt.
Allerdings bietet das Embedded Gateway nicht so viele Webserver-Features wie ein
Apache - so gibt es kein URL Rewriting, keine virtuellen Hosts, keine Proxy- und keine speziellen
Authentifizierungsmodule. Insofern eignet sich das Embedded Gateway vor allem für
Entwicklermaschinen und kleinere Intranet-Umgebungen. Aus Lizenzsicht ist das
Embedded Gateway mit der Datenbanklizenz abgedeckt. Für SSL-Zugriff ist allerdings
eine Lizenz sowohl der Enterprise Edition der Datenbank als auch der Advanced Security Option
erforderlich.
Abbildung 1: Architektur von Application Express mit dem PL/SQL Embedded Gateway
Der Apache Webserver mit mod_plsql ist vor allem für
APEX-Installationen mit
Zugriff aus dem Internet oder für solche mit höheren Anforderungen an die
Möglichkeiten des Webservers geeignet. So können mit URL Rewriting des Apache Webservers
"sprechende URL" eingerichtet werden, virtuelle Hosts, Proxy-Server und andere
Optionen sind kein Thema. Allerdings ist das mod_plsql, welches die eigentliche
Verbindung zwischen APEX und dem Apache Webserver herstellt, nur im Apache-Server von
Oracle (Oracle HTTP Server, OHS) verfügbar - es kann nicht in eine andere
Apache-Variante integriert werden.
Insbesondere bei standardisierten Infrastrukturen wird daher vielfach ein zweiter
Webserver benötigt, da für den OHS keine Betriebskonzepte vorliegen.
Solange der OHS nur für APEX genutzt wird und
auf der gleichen Maschine läuft, sind keine separaten Lizenzen erforderlich. Wird
der OHS dagegen auf einem anderen Rechner installiert, so sind für diesen Rechner
Oracle Fusion Middleware-Lizenzen erforderlich.
Abbildung 2: Architektur von Application Express mit dem Apache Webserver und mod_plsql
Der APEX J2EE Listener ist eine vollständig
auf Java basierende Implementierung
des mod_plsql. Es wird als WAR-Archiv zur Verfügung gestellt - dieses Format
ist für J2EE-Anwendungen üblich. Und wie andere J2EE-Anwendungen kann auch der
APEX Listener in unterschiedliche Application Server installiert werden - der
Installation Guide erwähnt Tomcat, Oracle Weblogic Server und Oracle OC4J. Andere
Application Server sind ebenso denkbar. Interessant sind die zusätzlichen
Features des APEX Listeners. So bietet er einen erweiterten Datei-Upload an;
Excel-Dateien können automatisch und ohne zusätzliches Coding direkt in
APEX-Collections hochgeladen werden.
Der APEX-Listener selbst muss nicht
lizensiert werden. Der Betrieb des APEX Listeners auf einem freien Applikationsserver
wie Tomcat ist demnach lizenzkostenfrei - wird er auf lizenzpflichtiger Software
wie Oracle Weblogic betrieben, so muss diese lizensiert werden.
Abbildung 3: Architektur von Application Express mit dem APEX J2EE Listener
PL/SQL Embedded Gateway
Das PL/SQL Embedded Gateway ist ein eigener
HTTP-Server direkt in der
Datenbank. Technische Grundlage sind die
Protokollserver der XML DB. Der
HTTP-Endpoint wird durch den normalen
Oracle Listener bereitgestellt, die
HTTP-Anfragen der Browser werden durch
Shared Server Prozesse der Datenbank bearbeitet.
Mehr zur Architektur der XML DB Protokollserver findet sich im XML DB Developers' Guide
der
Oracle-Dokumentation.
Das Embedded Gateway wird mit Hilfe des PL/SQL-Pakets DBMS_EPG
eingerichtet. Für APEX müssen Sie aber gar nicht mit diesem Paket arbeiten - es sind
fertige Konfigurationsskripte vorhanden.
-
Starten Sie als SYS das
Skript $ORACLE_HOME/apex/apxconf.sql. Es fragt Sie nach
dem HTTP-Port, den Sie für Application Express verwenden möchten, und führt dann
die nötigen Konfigurationsschritte durch.
-
Starten Sie im APEX-Verzeichnis als SYS das Skript
apex_epg_config.sql. Als Parameter geben Sie
das Verzeichnis, in das Sie das heruntergeladene
APEX-Archiv ausgepackt haben, an.
-
Entsperren Sie den Datenbanknutzer ANONYMOUS.
Geben Sie dazu als (ebenfalls als SYS) folgendes Kommando ein:
Auch hierzu finden sich ausführliche Hinweise in der
Oracle Dokumentation zu Application Express.
Oracle HTTP Server (Apache mit mod_plsql)
Der Apache Webserver wird
separat heruntergeladen und installiert. Der Download-Link ist
auf der OTN-Seite der Oracle-Datenbank enthalten. Abbildung 4 zeigt
den Link für den Oracle HTTP Server auf der
Download-Seite von Oracle11g Release 2 für Windows.
Allerdings ist die OHS-Version von der Datenbankversion völlig unabhängig, da
er in ein eigenes ORACLE_HOME installiert wird.
Sie können also durchaus
den OHS, den Sie von der Oracle11g-Seite heruntergeladen haben, mit einer
Oracle10g-Datenbank verwenden.
Abbildung 4: Download Oracle HTTP Server (Apache mit mod_plsql)
Zur Installation des OHS rufen Sie das Installationsprogramm (runInstaller oder setup.exe)
auf. Nach der Installation
-
Für Application Express wird von Oracle nun auch die
Apache-Version 2.0
ausgeliefert. Und diesen Apache 2.0 können
Sie nicht nur mit Oracle11g,
sondern auch mit Application Express auf einer
Oracle10g-Datenbank nutzen.
-
Für Oracle11g gibt
es keine Companion CD mehr, der
Apache 2.0 steht demnach als
separater Download im Oracle Technet zur Verfügung.
Die Konfiguration des mod_plsql im Apache 2.0 erfolgt
wie gehabt und ohne
Unterschiede zu früheren Versionen. Sie ist in der Dokumentation zu Application Express im
Installation Guide beschrieben.
Abbildung 1: Architektur von Application Express mit dem Apache Webserver und mod_plsql
PL/SQL Embedded Gateway
Das PL/SQL Embedded Gateway ist ein eigener
HTTP-Server direkt in der
Datenbank. Technische Grundlage sind die
Protokollserver der XML DB . Der
HTTP-Endpoint wird durch den normalen
Oracle Listener bereitgestellt, die
HTTP-Anfragen der Browser werden durch
Shared Server Prozesse der Datenbank bearbeitet.
Mehr zur Architektur der XML DB Protokollserver findet sich im XML DB Developers' Guide
der
Oracle-Dokumentation.
Abbildung 2: Architektur von Application Express mit dem PL/SQL Embedded Gateway
Das Embedded Gateway wird mit Hilfe des PL/SQL-Pakets DBMS_EPG
eingerichtet. Wenn
Sie eine Oracle11g-Datenbank installiert und aufgesetzt haben, müssen Sie das Paket
jedoch nicht bemühen; es ist alles vorbereitet. Es sind nur zwei Schritte nötig:
-
Starten Sie als SYS das
Skript $ORACLE_HOME/apex/apxconf.sql. Es fragt Sie nach
dem HTTP-Port, den Sie für Application Express verwenden möchten, und führt dann
die nötigen Konfigurationsschritte durch.
-
Entsperren Sie den Datenbanknutzer ANONYMOUS.
Geben Sie dazu als (ebenfalls als SYS) folgendes Kommando ein:
Auch hierzu finden sich ausführliche Hinweise in der
Oracle Dokumentation zu Application Express.
Bevor wir nun zu einer Gegenüberstellung von Apache und PL/SQL Embedded Gateway und
zu konkreten Empfehlungen kommen, lesen Sie im folgenden noch einige Informationen
zum Umgang mit dem Embedded Gateway.
Performance-Optimierungen für das Embedded Gateway
Nach der Standardeinrichtung durch das Skript apxconf.sql funktioniert
das Embedded Gateway; allerdings sind die Einstellungen nicht unbedingt optimal.
Mit den folgenden Tipps lässt sich die Performance durchaus noch verbessern:
-
Setzen Sie (als DBA) die Parameter
shared_servers und
max_shared_servers so,
dass Serverprozesse (Shared Server) in
hinreichender Anzahl bereitstehen:
Im Serverbetrieb können Sie als "Daumenregel" annehmen, dass ein Shared Server
Prozeß 10 Datenbankverbindungen betreiben kann. Mit 5 Shared Server-Prozessen
kommen Sie normalerweise also problemlos aus.
-
Auch die Anzahl der Dispatcher ist
von Bedeutung; diese nehmen die Browser-Anfragen
entgegen - auch hier ist es meist sinnvoll, mehr als einen Dispatcher zu starten. Der
Parameter dispatchers ist bei Ihnen schon gesetzt, wir
ändern nur die Anzahl - es kommt auf den rot markierten Teil an:
Wenn die SID Ihrer Datenbank also orcl ist, sieht der Parameter so aus:
Image Caching sicherstellen
Die Bilder, welche im Rahmen der Application Express Benutzeroberfläche dargestellt
werden, ändern sich bekanntlichermaßen erst mit dem nächsten APEX Release - es ist
also in jedem Fall sinnvoll, diese im Browser-Cache zu halten.
In Application Express 3.1 ist dies auch völlig unproblematisch. Der Browser und die
Application Express Engine kommunizieren entsprechend miteinander so dass der Browser,
wenn er das Bild schon im Cache hat, dieses nicht mehr vom Server anfordert. Mit APEX
3.0 oder auf einer XE-Datenbank funktioniert dies allerdings nicht immer wie
gewünscht. Wenn Sie feststellen, dass die Bilder bei Ihnen mit jedem Seitenaufbau (F5)
stets neu vom Server geladen werden (Abbildung 3), kann folgende Anweisung (als DBA ausführen)
Abhilfe schaffen.
Auf einer APEX 3.1-Umgebung ist das normalerweise nicht erforderlich.
Abbildung 3: Test mit dem Firebug-Plugin: Bilder wurden vom Server geladen und nicht aus dem Cache geholt
Den HTTP Port nachträglich ändern
Um den HTTP Port des Embedded PL/SQL Gateway nachträglich zu ändern, benötigen Sie nur
einen PL/SQL Aufruf:
Wenn Sie auf einem Unix oder Linux-System einen Port unter 1024 nutzen möchten, müssen
Sie ein wenig mehr tun - eine Beschreibung der nötigen Schritte finden Sie in der
Dokumentation zur Oracle XML DB.
Embedded Gateway und sichere Verbindungen (SSL)
Das PL/SQL Embedded Gateway kann auch im SSL-Modus betrieben werden. Dabei sind jedoch
zwei Voraussetzungen zu beachten:
- Diese Funktionalität ist Teil der Advanced Security Option
- Sie benötigen ein Server Zertifikat, mit welchem sich die Datenbank gegenüber
dem Webbrowser "ausweist".
Genaue Anweisungen zur Konfiguration des PL/SQL Embedded Gateway mit SSL
finden Sie im
Handbuch zur Oracle XML DB.
Logging
Verwendet man den Apache, ist alles ganz einfach. Wenn es ein Zugriffsproblem
gibt und auf dem Bildschirm nur die berühmte HTTP 404 oder HTTP 500-Meldung
erscheint, schaut man am besten in die Datei error_log
hinein - dort findet
man dann in aller Regel einen ORA-Fehlercode, der beim Analysieren des Problems
weiterhilft.
Standardmäßig findet beim PL/SQL Embedded Gateway keinerlei Logging statt. Auch
im Fehlerfall sieht man außer der HTTP Fehlermeldung oder einem ggfs. leeren
Bildschirm nichts. Bei Problemen sollte also zunächst das Logging aktiviert
werden - und zwar wie folgt:
Von nun an werden Debugging-Informationen in die Datenbank-Tracedateien
geschrieben (user dump destination).
Der Loglevel LOG_DEBUG führt
zu recht umfangreichen
Informationen. Aus Performancegründen sollten Sie das Logging (wie immer) nur
einschalten, wenn Sie es tatsächlich benötigen - es kostet ebenfalls
Ressourcen.
Mit Hilfe des Loggings können Sie auch eine weitere Eigenheit des Embedded Gateways
ergründen - dazu der nächste Abschnitt.
Eigene PL/SQL Prozeduren direkt per URL aufrufen
Im Gegensatz zum Apache erlaubt das Embedded Gateway den direkten
Aufruf von eigenen PL/SQL-Prozeduren nicht. Wenn Sie also als Beispiel im
Parsing Schema Ihrer APEX-Anwendung
die folgende Prozedur erzeugen und
die Ausführungsprivilegien an alle vergeben ...
... und diese Prozedur dann im Browser aufrufen ...
Abbildung 4: 1. Versuch: Direkter Aufruf einer eigenen PL/SQL Prozedur mit dem Embedded Gateway"
... stellen Sie fest, dass dies offensichtlich nicht erlaubt ist. Verwendet man den
Apache, funktioniert es ohne Probleme. Woran liegt das? Ein Blick in die Logging-Informationen
gibt Auskunft:
Das PL/SQL Embedded Gateway erlaubt das direkte Aufrufen nur für die Prozeduren der
APEX-Engine. Möchte man (wie im Beispiel) auch andere Prozeduren aufrufen, müssen diese
freigeschaltet werden. Dir Prüfung erfolgt, indem das Embedded Gateway die Prozedur
wwv_flow_epg_include_mod_local im Schema
der APEX-Engine (hier: FLOWS_030100) aufruft.
Standardmäßig liefert diese stets false zurück. Spielen
Sie also als SYS folgende Prozedur ein.
Ein neuer Versuch mit dem Browser funktioniert nun. Natürlich können Sie die
Namen der Prozeduren auch in einer Tabelle speichern und im PL/SQL Code anhand
dieser Tabelle prüfen, ob das Aufrufen der Prozedur erlaubt ist. Das einfachste
denkbare Beispiel wäre, stets true zurückzugeben - damit würde sich das
Embedded Gateway genauso wie der Apache verhalten.
Abbildung 5: Direkter Aufruf einer eigenen PL/SQL Prozedur mit dem Embedded Gateway nach Freischaltung
Pro und Kontra ...
Nun stellt sich natürlich die Frage, ob man Application Express wie bisher
mit dem Apache Webserver oder mit dem
PL/SQL Embedded Gateway betreiben soll. Performance ist in aller Regel kein
Kriterium - beide Varianten lassen sich so einrichten, dass man performant damit
arbeiten kann.
Zwar nutzt die "ready to use"-Installation von Application Express in Oracle11g
das Embedded Gateway - daraus kann aber keine generelle Empfehlung
abgeleitet werden. Vorteile hat sowohl das Embedded Gateway ...
-
Das Aufsetzen ist wesentlich leichter.
Es muss kein DAD
für das mod_plsql eingerichtet werden und
nach dem Starten der Datenbank kann Application Express sofort genutzt werden.
-
Alle statischen Dateien (Bilder, JavaScript) und alle Konfigurationsdetails
befinden sich in der Datenbank - sind also ohne weiteres Zutun in jedem Datenbank-Backup
enthalten.
... als auch der Apache Webserver:
-
Mit dem Apache kann der
Webserver auf eine andere Maschine verlagert werden.
So kann eine Application Express-Anwendung auch ins Internet gestellt werden.
Der Webserver befindet sich dann außerhalb, die Datenbank (selbstverständlich)
innerhalb der Firewall. Man kann sogar noch weiter gehen und einen Apache
ohne mod_plsql außerhalb
und einen Apache mit mod_plsql innerhalb
der Firewall platzieren. Das Apache-Modul "mod_proxy" leitet die Anfragen dann
von einem Webserver zum anderen.
-
Statische Dateien können ins Dateisystem gelegt werden;
dies nimmt in stark beanspruchten Systemen Last von der Datenbank.
-
Der Apache erlaubt dank seiner Module eine
umfassendere und ausgefeiltere Konfiguration
des Systems - dazu zwei Beispiele:
-
Das Einrichten von
sprechenden URL für bestimmte Anwendungen ist nur
mit dem Apache möglich, da das Apache mod_rewrite
hierfür genutzt wird.
-
Das Modul mod_proxy erlaubt das
Weiterleiten von bestimmten Anfragen an andere Server;
für den Browser sieht es jedoch so aus, als ob alle Anfragen vom Apache
bedient werden.
Schlußfolgerungen
Das PL/SQL Embedded Gateway eignet sich gut für kleinere
Einzelplatz- oder Abteilungssysteme.
So ist es eine gute Wahl für einen Entwickler-Arbeitsplatz. Die
Administration und Wartung ist wesentlich einfacher - man startet die Datenbank
und kann Application Express sofort nutzen.
Für größere Installationen, bspw. für
unternehmensweite Installationen oder Hosting-Systeme,
ist das PL/SQL Embedded Gateway wahrscheinlich nicht geeignet. Für solche
Systeme reichen die Möglichkeiten des Gateways nicht aus; Apache-Module werden
für URL-Rewriting, Log-Mechanismen, Proxy-Server und andere Funktionen
benötigt, so dass am Apache Webserver kein Weg vorbeiführt.
Zurück zur Community-Seite
|