Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Ein Blick unter die Motorhaube von Oracle APEX Patrick Wolf, Sphinx IT Consulting DOAG Konferenz Nürnberg, 22.11.2007."—  Präsentation transkript:

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

2 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

3 Über Sphinx IT Consulting
Gegründet 1993 Erstellung von Individualsoftware Consulting im Bereich Datenbanken & Java Middleware Spezialist im Oracle Umfeld Weitere Informationen auf Über Patrick Wolf Solution Architect bei Sphinx IT Consulting Oracle APEX Developer of the Year 2007 und Oracle ACE Betreibt einen APEX Blog – Autor des ApexLib Frameworks – Autor des Oracle APEX Builder Plugins Zu erreichen unter

4 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

5 3-Tier mit eigenem Web Server

6 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

7 2-Tier mit integriertem Web Server

8 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, ...

9 mod_plsql/Embedded PL/SQL Gateway
Mapping eines URLs -> DAD Konfiguration -> Datenbank -> APEX Instanz dad.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

10 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 - Controlling Database Processes for Each mod_plsql Request - PlsqlIdleSessionCleanupInterval PlsqlMaxRequestsPerSession

11 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

12 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

13 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

14 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)

15 Aufbau einer Oracle APEX HTML Seite

16 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

17 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

18 Oracle APEX Engine Array mit IDs der Page Item
wwv_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_v in wwv_flow_global.vc_arr2 default empty_vc_arr, ... p_v in wwv_flow_global.vc_arr2 default empty_vc_arr, p_t in varchar2 default null, p_t in varchar2 default null, f in wwv_flow_global.vc_arr2 default empty_vc_arr, fcs in wwv_flow_global.vc_arr2 default empty_vc_arr, x in varchar2 default null, x 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, ...)

19 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

20 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!!!

21 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

22 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 Substitution Strings ersetzen (z.B.: #OWNER#, &APP_USER., &PAGE_ITEM., …) -> WWV_Flow.trim_sql Bind Variablen ermitteln (:PAGE_ITEM) -> z.B.: WWV_Flow_Utilities.get_using_clause PL/SQL Expression zu vollständigem PL/SQL Code umwandeln begin wwv_flow.g_boolean := nvl( :P6_PRODUCT_NAME IS NOT NULL, false ); end;

23 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“ Nicht viel! Regeln sind bereits fix als PL/SQL Code in der Oracle APEX Engine abgelegt 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; Wesentlich schneller und weniger Belastung für Datenbank! Wenn möglich immer Deklarative vor PL/SQL Code verwenden

24 Wie ermittelt man so etwas?
p_trace=YES ist Dein Freund! Generierten HTML Code ansehen Oracle APEX Packages ansehen Teilweise OTN Forum

25 Interessantes Neues Statement of Direction für Oracle APEX 3.1 und 4.0 auf Video von Interactive Report Region (3.1 Feature) auf Oracle APEX Blogs auf Denes Kubicek’s Beispiele auf Carl Backstrom’s Beispiele auf APEX OTN Forum auf

26 Oracle APEX 3.1 Beta verfügbar!!!

27 Open Source im Oracle APEX Umfeld
ApexLib – Entwicklungsframework für Oracle APEX unter Oracle APEX Builder Plugin – Produktivitätsverbesserung für die Entwicklungsumgebung unter Oracle APEX Apps unter Packaged Applications unter

28 Noch etwas „Fortgeschrittene Techniken aus der Praxis“
Geplantes Training „Fortgeschrittene Techniken aus der Praxis“ von Dietmar Aust, Denes Kubicek und Patrick Wolf am Feb. 2008 Bei Interesse, Mail an Genaue Agenda und Details werden noch bekannt gegeben.

29 Danke für die Aufmerksamkeit!


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

Ähnliche Präsentationen


Google-Anzeigen