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 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 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 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 - confmods.htm#i confmods.htm#i –Controlling Database Processes for Each mod_plsql Request - apptroub.htm# apptroub.htm# –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 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_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,...)

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 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;

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

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 _express/apex_sod.html _express/apex_sod.html Video von Interactive Report Region (3.1 Feature) auf express-apex-40.html express-apex-40.html Oracle APEX Blogs auf _express/html/apex_com_blogs.html _express/html/apex_com_blogs.html Denes Kubiceks Beispiele auf Carl Backstroms 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 apex.blogspot.com/2006/12/quick- overview.html#apex_builder_pluginhttp://inside- apex.blogspot.com/2006/12/quick- overview.html#apex_builder_plugin Oracle APEX Apps unter apex/http://sourceforge.net/projects/oracle- apex/ Packaged Applications unter _express/packaged_apps/packaged_apps.html _express/packaged_apps/packaged_apps.html

28 Noch etwas Geplantes Training Fortgeschrittene Techniken aus der Praxis von Dietmar Aust, Denes Kubicek und Patrick Wolf am Feb 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