1 / 29

Agenda

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.

arwen
Download Presentation

Agenda

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ein Blick unter die Motorhaubevon Oracle APEXPatrick Wolf, Sphinx IT ConsultingDOAG Konferenz Nürnberg, 22.11.2007

  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 • WeitereInformationen 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 patrick.wolf@sphinx.at

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

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

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

  26. Oracle APEX 3.1 Beta verfügbar!!!

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

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

  29. Danke für die Aufmerksamkeit!

More Related