Aufgabe: Eine zentrale Serverumgebung soll für alle APEX Instanzen im Haus zuständig sein.
Lösung 1 - Ein Tomcat hält pro Datenbank eine eigene ORDS Umgebung
ORDS mehrfach unter verschiedenen WAR Namen in Tomcat aufsetzen
Ablauf:
Vorteil: Trennung der Applikationen
Nachteil: Mehr Patch Aufwand bei einem ORDS Upgrade/Patch
Lösung 2 - Ein ORDS ist für mehrere Datenbanken (mit je eine APEX Instance) zuständig über mehrere Pools
Ablauf:
Vorteil: Effektiver mit den Ressourcen der Maschine umgehen Nachteil: URL Mapping will gerade bei mir überhaupt nicht so wie beschrieben .-(
Wo liegt das Konfigurationsverzeichnis mit java -jar .\ords.war configdir?
java -jar .\ords.war configdir Mai 15, 2017 10:11:12 PM INFO: The config.dir value is C:\oracle\ords
Sind die Metadaten des ORDS alle gültig und passt DB und ORDS Version zusammen mit java -jar .\ords.war validate:
java -jar .\ords.war validate Enter the name of the database server [10.10.10.1]: Enter the database listen port [1521]: Enter the database service name [GPI]: Please login with SYSDBA privileges to verify Oracle REST Data Services schema. Enter the username with SYSDBA privileges to verify the installation [SYS]: Enter the database password for SYS: Confirm password: Oracle REST Data Services will be validated. Validating Oracle REST Data Services schema version 3.0.9.348.07.16 ... Log file written to C:\oracle\products\ords\logs\ords_validate_core_2017-05-15_220644_00629.log Completed validating Oracle REST Data Services version 3.0.9.348.07.16. Elapsed time: 00:00:03.450
Das ORDS WAR wird mehrfach unter verschiedenen WAR Namen in Tomcat deployed.
Jede Datenbank Verbindung läuft damit über einen eigenen Tomcat Container
Ablauf:
mit java -jar .\ords.war setup –database <database_name> die neuen Pools anlegen
java -jar .\ords.war setup --database gpi2 # alle Dialoge ausfüllen
Nun werden im ords/conf/ Verzeichniss alle Pool Dateien mit „gpi2_“ angelegt.
Wie erfolgt das Mapping? Anzeige der Hilfe mit java -jar .\ords.war help map-url.
Mit java -jar .\ords.war map-url –type base-path –workspace-id INTERNAL <URL_PATH> <DB_POOLNAME> wird das Mapping angelegt:
java -jar .\ords.war map-url --type base-path --workspace-id INTERNAL /gpi2 gpi2
Eine Datei „url-mapping.xml“ wird erzeugt
<?xml version="1.0" encoding="UTF-8"?> <pool-config xmlns="http://xmlns.oracle.com/apex/pool-config"> <pool name="gpi2" base-path="/gpi2" workspace-id="INTERNAL" updated="2017-05-15T20:25:49.646Z"/> </pool-config>
Soweit die Theorie mit dem ORDS Multi Pooling ⇒ leider bekomme ich nur eine 404 wenn ich versuche die URL http://localhost:9090/ords/gpi2/ aufzurufen. Darauf achten das am Ende auch der / nicht vergessen wird!
[TE] url-mapping start: 2017-05-15T20:07:13.396Z duration: 184ms [TE] GET /ords/gpi2/ start: 2017-05-15T20:07:13.396Z duration: 185ms URLMappingNotFoundException [statusCode=404, reasons=[The request could not be mapped to any database. Check the request URL is correct, and that URL to database mappings have been correctly configured]]
Nun ist guter Rat teuer ….
Nach dem ersten Aufruf nur die Seite „404 Page Not found“ erhalten, hier läuft etwas falsch …..
Debugging / logging aktivieren über die default.xml
<entry key="debug.debugger">true</entry> <entry key="debug.printDebugToScreen">true</entry>
Logging einschalten:
<entry key="log.logging">true</entry> <entry key="log.maxEntries">500</entry>
Immer noch keine Lösung, bin noch weiter am Suchen, was hier für ein trivialer aber nerviger Fehler vorliegt.
Kontrolle der Metadaten des ORDS:
SELECT * FROM ords_metadata.apex_pool_config;
demnächst mehr
ORDS Übersicht