DOAG 2006: More than Dept and Emp mit JDeveloper and ADF
1. Mehr als Dep und Emp
Erfahrungen mit JDeveloper und
Oracle ADF
Ulrich Gerkmann-Bartels
Berater
2. Zahlen und Fakten
TEAM in Paderborn
Paderborn - Schloß Neuhaus Gründung 1982
Geschäftsführung
Michael Baranowski - Heike Käferle
Firmenzentrale
DOAG 2006
Unternehmensgruppe
Materna
1.100 Mitarbeiter
120 Mio. Euro
Umsatz in 2004
50 Mitarbeiter
Copyright TEAM, Paderborn Nov-06 Seite 2
3. Ein Minimum an Vorbereitung
(1) Erstelle ein separates Projekt (fwk-ext) das alle
Basisklassen des ADF BC – Framework als Unterklasse
enthält
(2) Verwende das Projekt als Library und konfiguriere diese
Klassen als „Business Components: Base Classes“
DOAG 2006
Copyright TEAM, Paderborn Nov-06 Seite 3
4. ADF BC: Base Classes
DOAG 2006
Hinweis: Sinnvolle Namenwahl kann so manche Missverständnisse verhindern !
(java.lang.Number vs. oracle.jbo.domain.Number)
Copyright TEAM, Paderborn Nov-06 Seite 4
5. Was ist ein Applikation Modul ?
A unit of work ?!?
Denke in Services/Funktionen nicht in UI‘s
Vereinige Business Objekte und Services zu einer AM*, die
einen gemeinsamen Aufgabenkontext erfüllen
Wie groß ist die gesamte Applikation ? (Baustein oder
kleine Applikation)
Die Anzahl der enthaltenen ViewObjekte in einem AM
beeinflussen das Startverhalten einer Applikation
DOAG 2006
AM* - Applikation Module
Copyright TEAM, Paderborn Nov-06 Seite 5
6. AM – Mittlere bis größere Applikationen
Betrachte das AM immer als Modul, dass in eine
bestehende Umgebung eingebunden wird
Verwende ein RootService – AM, in das die eigentlichen AM
ggfs. zu Laufzeit geladen werden können
Die Verwendung einer definierten Hierarchie innerhalb der
AM erleichtert das Auffinden von Services und VO*
Verteile diese Module in eigene Projekte und importiere
diese in die eigentliche Applikation
DOAG 2006
service.findViewObject("RootService.Inventory.Locations");
VO* - ViewObject
Copyright TEAM, Paderborn Nov-06 Seite 6
10. AM – Schnittstelle zum UI / Binding
Erfahrungen:
Funktionalität wird als Service implementiert in der Business
Schicht
– Testbarkeit unabhängig vom UI
– Saubere Trennung
– Man schreibt ja auch nicht PL/SQL-Code in den Forms-Trigger
oder ?
Zu jedem Dialog gibt es eindeutig zugeordnete (Main-) VO
– Welcher Dialog benutzt noch mal dieses VO ?
DOAG 2006
– Warum hab ich jetzt in diesem Dialog nur noch 4 Datensätze ?
Copyright TEAM, Paderborn Nov-06 Seite 10
11. ADF BC: Wann machen wir einen Post..
Gründe für einen Post:
Trigger löst Aktionen innerhalb der Datenbank aus
– Datenänderungen in anderen Tabellen, die im Model
verwendet werden
Prüfung von Constraints in der Datenbank
(SWING: Frühzeitiges Feedback im UI zu erzwingen!)
DOAG 2006
Copyright TEAM, Paderborn Nov-06 Seite 11
12. ADF BC: Wann machen wir einen Post..
Wenn man schon einen postChanges machen muss, dann aber..:
Commit bzw. Rollback unmittelbar folgen lassen
WebApp: Commit oder Rollback muss vor Abschluss der
Verarbeitung des Request erfolgen
(Es ist nicht sichergestellt, das man den gleichen Connect wieder bekommt)
Tip: Wir verwenden den postChanges nur innerhalb unserer
DOAG 2006
Tests, um ein Commit zu simulieren
Copyright TEAM, Paderborn Nov-06 Seite 12
13. Berechtigung auf Satzebene
Aufgabe: Suche in einer Organisationsstruktur nach Adressen,
Projektinformationen oder Dokumenten unter der
Berücksichtigung von Berechtigungen.
Zeige die gefunden Elemente in einer Baumstruktur an.
DOAG 2006
Copyright TEAM, Paderborn Nov-06 Seite 13
14. Berechtigung auf Satzebene
Ansätze:
Rollenbasierte Berechtigungen(ADF Security / JAAS-
Provider) auf Satzebene
– Wie vergebe ich das Recht einen privaten Kontakt nur für
bestimmte Benutzer zugänglich zu machen ?
Verwendung von java.security.Permission, um so
Funktionen bzw. Fundmengen zu autorisieren
– Wie bekomme ich zum aktuelle Benutzer meine Permission
in das ViewObject ?
DOAG 2006
Copyright TEAM, Paderborn Nov-06 Seite 14
15. Berechtigung auf Satzebene
Umsetzung:
Rollenbasierte Berechtigungen wird nur verwendet, um
einzelne Applikationsmodule (Benutzerpflege) zu
autorisieren
PODC
Berechtigungen werden als PermissionToken in einer
Datenbanktabelle gehalten
Zugriff auf zu autorisierende Daten erfolgt nur wenn in der
Datenbank Session ein entsprechender Benutzerkontext
gesetzt ist (Ansatz: VPD oder Oracle Portal)
DOAG 2006
Business Schicht erhält nur autorisierte Daten
PODC – Plain Old Database Code ☺
Copyright TEAM, Paderborn Nov-06 Seite 15
16. Binding: Drag and Drop oder doch besser..
Erfahrungen:
Drag und Drop ganz schön und gut aber..
– Probleme beim Löschen, Umbenennen..
– Sobald man eigene Action bzw. MethodeAction mit
Parameter definiert, muss man editieren
– Sei Dir immer im klaren was in der PageDef steht
– Seit 10.1.3 nicht mehr schreibgeschützt, im Jdev ☺
Migration von UI (UIX-Tags in JSP oder ADF UIX) waren
nicht wirklich ein Gewinnbringer
DOAG 2006
Verwende ein Try-Projekt im JDeveloper, um nicht
erklärbare Erscheinungen ohne großes Umfeld nach zu
prüfen
Copyright TEAM, Paderborn Nov-06 Seite 16
17. Binding: Drag and Drop oder doch besser..
Was fehlt / Nice to have:
Include bzw. Vererbung von PageDefs
MethodeAction, die Methoden in einer BackingBean bzw.
POJO innerhalb eines ApplicationContext im UI aufrufen
können ☺
DOAG 2006
POJO – Plain Old Java Object
Copyright TEAM, Paderborn Nov-06 Seite 17
18. JSF for nonbelievers
Aufgabe: Suche in einer Organisationsstruktur nach Adressen,
Projektinformationen oder Dokumenten unter der
Berücksichtigung von Berechtigungen.
Zeige die gefunden Elemente in einer Baumstruktur an.
DOAG 2006
Copyright TEAM, Paderborn Nov-06 Seite 18
19. JSF for nonbelievers
Ansätze:
ADF Tree mit entsprechenden VO
ADF TreeTable mit entsprechenden VO
Entwurf einer eigenen JSF Komponente
Ergebnis:
Verwendung der ADF Faces Komponenten mit Bindung an VO
zeigte sich als nicht praktikabel.
DOAG 2006
Entwurf einer eigenen JSF Komponente führte schnell zu einen
erheblichen Mehraufwand, bei der benötigten Funktionalitäten.
Copyright TEAM, Paderborn Nov-06 Seite 19
20. JSF for nonbelievers
Lösung:
ADF TreeTable mit angepassten Model ohne direkte
Bindung an ein VO ☺
Ergebnis:
Implementierung eines angepassten Models auf der Basis von
ADF Faces.
Hohe Flexibilität, da der Inhalt des Knoten selbst definiert wird.
Layout des Baumes bzw. der Zeile kann wieder mit JSF
Komponenten geschehen.
DOAG 2006
Viele Funktionen des ADF TreeTable müssen nicht selber
implementiert werden. (Decoding des Key, SelectMany,
SelectOne)
Copyright TEAM, Paderborn Nov-06 Seite 20
24. ADF Faces Style
CSS Kenntnisse erforderlich !
Geänderter Style wird im WYSIWYG mal angezeigt und ein
anderes mal nicht !
CSS Preview hilft nicht wirklich
Problem mit „Body“ – Style konnten nur direkt in der JSPX
gelöst werden
Viele Möglichkeiten der Darstellung lassen sich durch das
Stylesheet oder durch Inline-Style lösen aber nicht alles
DOAG 2006
Copyright TEAM, Paderborn Nov-06 Seite 24
27. Umfeld: Version – CVS oder Subversion
Viele haben in den letzten Jahren CVS eingesetzt und tun dies noch
immer, warum zu Subversion wechseln.
Es ist einfach einfacher !
Löschen, Umbenennen bzw. Refactoring
Es geht zwar nicht alles, man wird nicht immer noch vom
Version-Tool so oft aufgehalten
DOAG 2006
Zusätzliches Tool:
http://www.tortoisesvn.org
Copyright TEAM, Paderborn Nov-06 Seite 27
28. Umfeld: Maven
Maven ist vom Grundsatz ein Build-Tool, bietet aber einige
wesentlichen Funktionen, die in einem Projektumfeld sehr
hilfreich sind:
Unternehmensweites Repository für Java-Libraries
Erzeugen von JavaDoc, Checkstyle- und Dependency –
Reports
Unabhängige Testumgebung außerhalb des JDevelopers
Generierung einer Projekt-Site
DOAG 2006
Copyright TEAM, Paderborn Nov-06 Seite 28
29. Umfeld: Maven
Erfahrungen:
Einführung benötigt Zeit
– Alle Libraries sollten ins JLib Repository
– Einmalige Erstellung der pom.xml für ADF BC
– Anpassung der Styles etc.
Integration im JDeveloper über External Tools
Maven setzt man nicht für ein Projekt ein, es sollte als
grundsätzliches Element in der Entwicklungsumgebung
eingeführt werden
DOAG 2006
Copyright TEAM, Paderborn Nov-06 Seite 29