Um in den Chat zu gehen, bitte mit dem Cursor gegen die obere Ecke des Bildschirms stoßen und auf das Chatsymbol klicken. Bitte testen Sie den Chat zu Beginn der Session. ADF News Session Performance von ADF Anwendungen Webkonferenz, 16. Juli 2010 Vortrag Thema Martin Kunze/Robotron – [email protected] – Moderation Annegret Warnecke/Oracle - [email protected] - +++ für diese Session ist eine Aufzeichnung geplant +++ Sie werden informiert, wenn die Aufzeichnung beginnt ... bitte wählen Sie sich zusätzlich zu der Webconferenz in die Telko ein - bitte während der WebConf voice streaming nicht nutzen Einwahldaten für die Telefonkonferenz 069 2222 16 106 oder 0800 66 485 15 ConfCode: 208 503 9 SecurityPasscode: 112233 Sie werden für den Webcast stumm geschaltet Inhalt Browserperformance (Client) Performance der Entwicklungsumgebung (JDeveloper) Anwendungslogik: Mittelschicht vs. Datenbank Tuning-Möglichkeiten ADF BC / ADF Faces / Taskflows Browserperformance Webanwendung leben von JavaScript Unterschiedliche JavaScript Engine der Browser sind dem Kunden oft nicht bekannt oft bestehen Firmenrestriktionen (nur Microsoft-Browser) Browserperformance Google Chrome derzeit einer der schnellsten Browser IE 7/8 weit abgeschieden (IE 9 macht vieles besser) Firefox die „beste“ Alternative „Browserproblematik“ frühzeitig mit dem Kunden besprechen Performance – JDeveloper JDeveloper… umfangreiche Entwicklungsumgebung die unzählige Operationen (Validierungen, …) durchführt Problem: sinkende Performance bei größeren Projekten Lösung: – JDeveloper-Einstellungen zur Geschwindigkeitssteigerung – Anwendung in „Anwendungs-Module“ (Projekte) unterteilen und Working Sets anlegen Performance – JDeveloper Tools -> Preferences – Extensions: unnötige Erweiterungen deaktivieren (ADF Swing, UML, EJB Modeler) – Code Editor / Display: unnötige Optionen deaktivieren – Filetypes -> Default Editor: JSPXSeiten in der „Source“ Ansicht starten Performance – JDeveloper Anwendung in Module aufteilen / Working Sets erstellen – Application –> Filter Application oder Trichtersymbol Run-Konfiguration (Testen während der Entwicklung) auf den aktuellen Working Set einstellen! – Run -> Use Current Working Set (Java EE only) Mittelschicht vs. Datenbank sehr aufwändige Prozesse in PL/SQL-Prozeduren auslagern und mittels Java (z.B. Application Module) starten Sicherung von getätigten Investitionen in PL/SQL Mittelschicht vs. Datenbank Methode per Data Controls in einer JSPX-Seite oder per oracle.binding.OperationBinding in einer Managed Bean nutzen Mittelschicht vs. Datenbank Vorsicht bei Global Temporary Tables und aktivierten Application Module Pooling – setReleaseLevel(ApplicationModule.RELEASE_LEVEL_RESER VED); im Konstruktor des Application Modules verwenden – Achtung: nur in speziellen Anwendungsfällen verwenden, umgeht Pooling-Mechanismen Tuning – ADF Faces Keep Things Simple: – Template „flach“ halten (wenig Animationen, da dies die Performance jeder Seite beeinflusst) – Client Geometry Management (Anpassungen der Komponenten an den Platz auf den Clientrechner [PanelSplitter, PanelStretchLayout, …]. „Kosten“ hängen direkt von der Komplexität der Seite ab Tuning – ADF Faces manuelle JavaScript – Code in Datei (*.js) auslagern – ADF-Tag: <af:resource type="javascript" source=" "/>. – nur Einbinden wenn benötigt (nicht im Template hinzufügen) Animationen (Popup, Tree, …) deaktivieren – <animation-enabled>false</animation-enabled> (trinidad-config.xml) visible vs. rendered – Komponenten die keine Interaktion auf der Client-Seite durchführen sollten nicht gerenderd werden Partial Page Rendering (PPR) – autoSubmit / partialSubmit / partialTriggers – AdfFacesContext.getCurrent().addPartialTarget("component"); Tuning – ADF BC (View Object) read-only VO – entity-based VO erstellen und die „Updateable“ Option deaktivieren – VO-Instanzen können den Entity Object (EO) Cache nutzen Bind Variablen / View Criterias nutzen – Wiederverwendung von Statements Tuning – ADF BC (View Object) JDBC Fetch Size erhöhen (default 1) – sollte der RangeSize des Iterators entsprechen „ All at once“ für look-up-Daten (List of Values) – alle Datensätze werden in die Mittelschicht transferiert – sinnvoll für View Objecte in einem shared Application Module Tuning – ADF BC (View Object) Scrollen über große Datenmengen – möglichst verhindern (getEstimatedRowCount()) – wenn nicht möglich „range paging“ (statt „scrollable“) verwenden Tuning – ADF BC (Application Module) jbo.ampool.initpoolsize erhöhen – verkürzt die Wartezeit beim ersten Aufruf der Anwendung jbo.ampool.minavailablesize – mind. 1, Neuerstellung des AM-Pools zu verhindern jbo.ampool.timetolive – höhere Wert erhört die Lebensdauer einer AM-Instanz Tuning – Taskflows Dynamic Regions nutzen – siehe “ADF News Session – Taskflow Integration” Transaction-Control der Bounded Taskflows nutzen – Bsp: 2 Taskflows mit je 1 Root-Application-Module • Master-Taskflow: “No Controller Transaction” Æ 2 DB-Verbindungen • Master-Taskflow: “Always Begin New Transaction” Æ 1 DB-Verbindung Fazit Performancegewinne können an vielen Stellen erzielt werden ADF bietet umfangreiche Konfigurationsmöglichkeiten um Anwendungen zu Optimieren Links: Oracle Application Development Framework Performance Tuning http://download.oracle.com/docs/cd/E15523_01/core.1111/e10108/adf.htm#CIHHGADG Avrom's Java EE and Oracle ADF Blog - ADF BC Tuning http://www.avromroyfaderman.com/2008/10/adf-bc-tuning-i-entity-objects/ Understanding Application Module Pooling Concepts and Configuration Parameters http://www.oracle.com/technology/products/jdev/tips/muench/ampooling/index.html Um in den Chat zu gehen, bitte mit dem Cursor gegen die obere Ecke des Bildschirms stoßen und auf das Chatsymbol klicken. ADF News Session Performance von ADF Anwendungen Martin Kunze/Robotron – [email protected] – Vielen Dank für Ihre Aufmerksamkeit! Thema ADF News Sessions wünschen einen angenehmen Urlaub und verabschieden sich in die Sommerpause diskutieren Sie mit uns über die Inhalte dieser Session auf https://www.xing.com/app/forum/seoparser/adfcomm/