29
Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Embed Size (px)

Citation preview

Page 1: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Ein Blick unter die Motorhaubevon Oracle APEX

Patrick Wolf, Sphinx IT ConsultingDOAG Konferenz Nürnberg, 22.11.2007

Page 2: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Agenda• Architekturübersicht• mod_plsql/Embedded PL/SQL Gateway• Connection Pool• Oracle APEX Sessions• Oracle APEX Engine• Oracle APEX News von der Oracle Open World in SF

Page 3: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Über Sphinx IT Consulting• Gegründet 1993• Erstellung von Individualsoftware• Consulting im Bereich Datenbanken & Java Middleware • Spezialist im Oracle Umfeld• Weitere Informationen auf http://www.sphinx.at/

Über Patrick Wolf• Solution Architect bei Sphinx IT Consulting• Oracle APEX Developer of the Year 2007 und Oracle ACE• Betreibt einen APEX Blog – http://inside-apex.blogspot.

com• Autor des ApexLib Frameworks – http://apexlib.

sourceforge.net/• Autor des Oracle APEX Builder Plugins• Zu erreichen unter [email protected]

Page 4: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Architekturübersicht• 3-Tier mit eigenem Web Server (OHS oder Oracle

Application Server) und mod_plsql

• 2-Tier mit integriertem Web Server in der Datenbank und Embedded PL/SQL Gateway

• Oracle APEX Engine

Page 5: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

3-Tier mit eigenem Web Server

Page 6: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

3-Tier mit eigenem Web Server• Vorteile:

– Statische Dateien schneller ausliefern

– HTTPS Overhead belastet nicht Datenbank CPU

– Security: Datenbankrechner ist nicht direkt nach außen sichtbar (Reverse Proxy eine andere Möglichkeit)

– mod_rewrite

– mod_gzip/mod_deflate

– ...

• Nachteile

– Zusätzlicher Rechner zum Installieren und Administrieren

– Kaum belastet

Page 7: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

2-Tier mit integriertem Web Server

Page 8: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

2-Tier mit integriertem Web Server

• Vorteile:

– Out-of-the-Box mit Oracle XE und 11g

– Kein zusätzlicher Rechner zum Installieren und Administrieren

• Nachteile

– Statische Dateien langsamer da aus Datenbank gelesen

– HTTPS Overhead belastet Datenbank CPU

– Security: Datenbankrechner direkt nach außen sichtbar

– Kein mod_rewrite, mod_gzip, ...

Page 9: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

mod_plsql/Embedded PL/SQL Gateway

• Mapping eines URLs -> DAD Konfiguration -> Datenbank -> APEX Instanzdad.conf Konfiguration: z.B. mit <Location /pls/apex>

• Connection Pool Verwaltung• PL/SQL Prozedur Aufruf in der Datenbank• Weiterleitung der Ausgabe an den Browser• Konfiguration

– Bei mod_plsql: Mit dads.conf am Apache Web Server (Name anders bei älteren Versionen des Application Servers). Siehe Oracle APEX Installationsanleitung.

– Bei Embedded PL/SQL Gateway: Mit Package DBMS_EPG

Page 10: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Connection Pool• Immer mit dem User

APEX_PUBLIC_USER/HTMLDB_PUBLIC_USER/ANONYMOUS/im DAD konfigurierten User

• Schnellerer Verbindungsaufbau da DB Sessions wiederbenutzt werden können

• Limitierung der gleichzeitigen Datenbank Sessions• Oracle APEX Session ist nicht einer dezidierten Datenbank

Session zugeordnet! Großer Unterschied zu C/S Anwendungen wie Oracle Forms! Oracle APEX ist Stateless!

• Konfigurationsinformationen:– mod_plsql Configuration Parameters - http://download.oracle.

com/docs/cd/B19306_01/server.102/b14190/confmods.htm#i1055414

– Controlling Database Processes for Each mod_plsql Request - http://download.oracle.com/docs/cd/A97336_01/comm.102/a87562/apptroub.htm#631218

– PlsqlIdleSessionCleanupInterval– PlsqlMaxRequestsPerSession

Page 11: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Connection Pool• Vorteile:

– Datenbank skaliert besser bei vielen gleichzeitigen Benutzern

– Transparent Session Failover bei einem Oracle RAC• Nachteile:

– Keine „Long Running Transactions“– Keine Globalen Package Variablen zwischen zwei Web

Requests (Daten Caching)– Umgebungsvariable USER liefert immer

APEX_PUBLIC_USER, ... statt angemeldetem User -> V(‘APP_USER’) verwenden

Page 12: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Oracle APEX Session• Beim ersten Request automatisch generiert (vor Login!)• Hängt am Workspace, nicht an der Applikation!!!• Über View APEX_WORKSPACE_SESSIONS sichtbar• Im Browser

– URL: f=APP_ID:PAGE_ID:SESSION– Cookie (für Session ID 0 in Oracle APEX 3.0)– Hidden Field in jeder Seite

• Session State (Application Items, Page Items, Preferences, Interner Engine State wie Tree, ...) in Datenbank persistiert

• Transparent Session Failover und Last Verteilung (Unterschied zu Java Applikationen)

• Neu in Oracle APEX 3.0: Session 0 -> URL zeigt immer 0, Wert in Cookie -> Searchengine Optimierung und Bookmarking

• Bei aktivem Logging: APEX_WORKSPACE_ACTIVITY_LOG sehr interessant

Page 13: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Oracle APEX Engine• Läuft direkt in der Oracle Datenbank• Reines PL/SQL• Applikations-Metadaten in Tabellen (im FLOWS_XYZ

Schema)• Interpretiert Applikations-Metadaten zur Laufzeit• Verantwortlich für

– Rendering und Seiten Verarbeitung bei Submit– Session Management– Authentifizierung/Autorisierung– Page Flow Kontrolle– Validierung– ...

• Schema der Engine ist FLOWS_XYZ (z.B.: FLOWS_030000)• Verwendet PL/SQL Web Toolkit

Page 14: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Oracle APEX Engine• 3 primären Einsprungspunkte

– „f“ Prozedur: Einfaches Interface für wwv_flow.show– wwv_flow.show: Zuständig für Page Rendering.

htmldb_Get (AJAX) verwendet es auch für On-Demand Prozess Aufruf.

– wwv_flow.accept: Zuständig für Seiten Verarbeitung bei Submit

• Diverse Hilfspackages für Oracle APEX Applikationsentwicklung

• Packages für Bearbeitung der Applikations-Metainformationen

• Sehr gut Instrumentalisiert -> Debug Mode verwenden (APEX_Application.debug in eigenem Code)

Page 15: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Aufbau einer Oracle APEX HTML Seite

Page 16: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Submit einer Seite im Browser• Name des Buttons as REQUEST setzen• Ermittelt aufzurufenden URL/PLSQL Prozedur aus „Form

Action“ z.B.: wwv_flow.accept• Inhalt aller HTML Input/Textarea/... Felder welche ein

NAME Attribut haben an Web Server schicken• Haben mehrere Felder den gleichen Namen -> Array

daraus bilden

Page 17: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

mod_plsql Verarbeitung• Über URL das DAD mit der DB Konfiguration ermitteln• DB Session aus Connection Pool oder neue DB Session

erstellen• Überprüfen ob angegebene Prozedur mit den Browser

Parametern/Werten übereinstimmt– Wenn Nein -> Error „The requested URL

/pls/apex/wwv_flow.accept was not found on this server.“– Im Apache Error Log

(/Apache/Apache/logs/error_log.xxxx) steht mehr Information. -> mod_plsql: /pls/apex/wwv_flow.accept HTTP-404 \nwwv_flow.accept: SIGNATURE (parameter names) MISMATCH\nVARIABLES IN FORM NOT IN PROCEDURE: P_T02X\nNON-DEFAULT VARIABLES IN PROCEDURE NOT IN FORM

• Aufruf der PL/SQL Prozedur (Oracle APEX Engine)• HTTP Buffer auslesen und Apache übergeben• Session State der DB Connection zurücksetzen

Page 18: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Oracle APEX Enginewwv_flow.accept ( p_request in varchar2 default null, p_instance in varchar2 default null, p_flow_id in varchar2 default null, p_flow_step_id in varchar2 default null, p_arg_names in wwv_flow_global.vc_arr2 default empty_vc_arr, p_v01 in wwv_flow_global.vc_arr2 default empty_vc_arr, ... p_v100 in wwv_flow_global.vc_arr2 default empty_vc_arr, p_t01 in varchar2 default null, ... p_t100 in varchar2 default null, f01 in wwv_flow_global.vc_arr2 default empty_vc_arr, ... fcs in wwv_flow_global.vc_arr2 default empty_vc_arr, x01 in varchar2 default null, ... x20 in varchar2 default null, p_debug in varchar2 default 'NO', p_trace in varchar2 default 'NO', p_md5_checksum in varchar2 default '0', p_page_submission_id in varchar2 default null );

Array mit IDs der Page Item

Für Multi Value Page Items (Checkboxes, Radio...)

Für normale Page Items (Datepicker, Text, ...)

Für Tabular Form Spalten

Für Dummy Felder (Pagination Select List, ...)

Page 19: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Oracle APEX Engine• NLS Einstellungen der DB Session setzen• Applikations-Metadaten lagen• Authentication/Authorization überprüfen• Session State laden (Page Items, Application Items, ...)• VPD Code ausführen• Prozesse/Computations/... ausführen• Page Submit Verarbeitung• Page Rendering• Details siehe Debug Mode für eine Seite

Page 20: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Ausführen der SQL Statements und des PL/SQL Codes

• Datenbank Session läuft unter User APEX_PUBLIC_USER– Darum liefert SELECT USER FROM DUAL immer

APEX_PUBLIC_USER und nicht den Applikation User -> V(‘APP_USER’)

– Auch bei Database User Authentication!• Aber APEX_PUBLIC_USER hat nur CREATE SESSION Privileg

und Zugriff auf FLOWS_FILES.WWV_FLOW_FILE_OBJECTS$• Über implizite Rechte der FLOWS_XZY (FLOWS_030000)

Packages?• Oracle APEX Packages sind mit DEFINERS RIGHT

definiert• FLOWS_XYZ hat wesentlich mehr Rechte• ALTER SESSION SET CURRENT_SCHEMA=Parsing

Schema?• Wie Zugriff auf Workspace fremde Schemas

verhindern?• Grosses Security Problem!!!

Page 21: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Ausführen der SQL Statements und des PL/SQL Codes

• Undokumentiertes Package DBMS_SYS_SQL ist die Lösung!

• Identisch mit DBMS_SQL• Hat aber Datenbankuser als Parameter unter dem der

Code ausgeführt werden soll.• „Sandbox“ die immer mit den Rechten des Parsing

Schemas des Workspaces arbeitet.• Direkte Grants an Parsing Schema notwendig

Page 22: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Ausführen der SQL Statements und des PL/SQL Codes

• Was passiert z.B. mit einer Condition vom Typ PL/SQL Expression?z.B.: :P6_PRODUCT_NAME IS NOT NULL

1. Substitution Strings ersetzen (z.B.: #OWNER#, &APP_USER., &PAGE_ITEM., …) -> WWV_Flow.trim_sql

2. Bind Variablen ermitteln (:PAGE_ITEM) -> z.B.: WWV_Flow_Utilities.get_using_clause

3. PL/SQL Expression zu vollständigem PL/SQL Code umwandeln

4. begin wwv_flow.g_boolean := nvl( :P6_PRODUCT_NAME IS NOT NULL, false );end;

Page 23: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Ausführen der SQL Statements und des PL/SQL Codes

• Was passiert z.B. mit einer Deklaration wie z.B. „Value of Item in Expression 1 Is NOT NULL“

1. Nicht viel! Regeln sind bereits fix als PL/SQL Code in der Oracle APEX Engine abgelegt

2. CASE CASE vConditionType WHEN 'Value of Item in Expression 1 Is NOT NULL' THEN wwv_flow.g_boolean := nvl(V(vExpression1), false ); WHEN 'Value ...' THEN wwv_flow.g_boolean := ... WHEN 'PL/SQL Expression' THEN Substitution Variables ersetzen Bind Variablen ermitteln PL/SQL Code erstellen Bind Variablen binden Dynamic SQL ausführen ELSE ...END CASE;

3. Wesentlich schneller und weniger Belastung für Datenbank!4. Wenn möglich immer Deklarative vor PL/SQL Code verwenden

Page 24: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Wie ermittelt man so etwas?

• p_trace=YES ist Dein Freund!• Generierten HTML Code ansehen• Oracle APEX Packages ansehen• Teilweise OTN Forum

Page 25: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Interessantes

• Neues Statement of Direction für Oracle APEX 3.1 und 4.0 auf http://www.oracle.com/technology/products/database/application_express/apex_sod.html

• Video von Interactive Report Region (3.1 Feature) auf http://inside-apex-de.blogspot.com/2007/09/oracle-application-express-apex-40.html

• Oracle APEX Blogs auf http://www.oracle.com/technology/products/database/application_express/html/apex_com_blogs.html

• Denes Kubicek’s Beispiele auf http://htmldb.oracle.com/pls/otn/f?p=31517:1

• Carl Backstrom’s Beispiele auf http://apex.oracle.com/pls/otn/f?p=11933:5

• APEX OTN Forum auf http://forums.oracle.com/forums/forum.jspa?forumID=137

Page 26: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Oracle APEX 3.1 Beta verfügbar!!!

Page 27: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Open Source im Oracle APEX Umfeld

• ApexLib – Entwicklungsframework für Oracle APEX unter http://apexlib.sourceforge.net/

• Oracle APEX Builder Plugin – Produktivitätsverbesserung für die Entwicklungsumgebung unter http://inside-apex.blogspot.com/2006/12/quick-overview.html#apex_builder_plugin

• Oracle APEX Apps unter http://sourceforge.net/projects/oracle-apex/

• Packaged Applications unter http://www.oracle.com/technology/products/database/application_express/packaged_apps/packaged_apps.html

Page 28: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Noch etwasGeplantes Training

„Fortgeschrittene Techniken aus der Praxis“

von Dietmar Aust, Denes Kubicek und Patrick Wolf am

11.-13. Feb. 2008

Bei Interesse, Mail an [email protected] Agenda und Details werden noch bekannt gegeben.

Page 29: Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007

Danke für die Aufmerksamkeit!