W-JAX 07 - AOP im Einsatz mit OSGi und RCP

  • 1,005 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,005
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
12
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. AOP im Einsatz mit OSGi und RCP Martin Lippert, Peter Friese und Heiko Seeberger
  • 2. Agenda • Einführung • Aspect-Weaving im Überblick • Aspect-Weaving für OSGi: – Equinox Aspects • Anwendungsfall: Security für Eclipse-RCP • Abschluss Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 2/?
  • 3. Aspektorientierte Programmierung • Modularisierung mit OO-Mitteln ist gut – Klassen, Interfaces, Vererbung, etc. • AOP ergänzt die OO-Mittel – AOP modularisiert „Cross-Cutting Concerns“ ClassA ClassB ClassC AspectX ConcernX ConcernX ConcernX ConcernX Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 3/?
  • 4. AOP im Einsatz • Mittlerweile etabliertes Werkzeug – AspectJ: Eine mächtige Spracherweiterung für Java – Spring AOP: Einfache Handhabung für Enterprise- Anwendungen – App-Server: Verwenden intern AOP-Mittel Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 4/?
  • 5. AspectJ = AOP für Java • Mächtige AOP-Erweiterung für Java • Eclipse-Projekt: www.eclipse.org/aspectj • Gute Tool-Unterstützung: – AJDT für Eclipse – Spring-IDE für Eclipse • Für die Verbindung von Spring-AOP und AJDT Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 5/?
  • 6. Wie funktioniert es? • Der Standard-Fall: – AspectJ compiliert die Aspekte und verwebt diese (Compile-Time Weaving) – Sehr gute Unterstützung in der IDE • Inkrementelles Compilieren • Marker und Crosscutting View – Transparente Technologie für den Entwickler Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 6/?
  • 7. Der Standard-Fall ClassA ClassB ClassC AspectX ConcernX ConcernX ConcernX ConcernX Projekt-Sourcen App-Classloader Java Virtual Machine Java Virtual Machine Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 7/?
  • 8. Aspect-Libraries • Aspekte werden mit AspectJ compiliert und in ein JAR-File verpackt – Z.B. auch abstrakte Aspekte • Verweben mit anderen Klassen und Aspekten beim Build – In der IDE oder beim „Headless Build“ – Als ob die Aspekte direkt in der IDE vorhanden wären Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 8/?
  • 9. Aspect-Libraries ClassA ClassB ClassC AspectX ConcernX ConcernX ConcernX ConcernX Projekt-Sourcen JAR App-Classloader Java Virtual Machine Java Virtual Machine Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 9/?
  • 10. „Projektfremde“ Targets • Was passiert, wenn sich Aspekte auf vorcompilierte Klassen auswirken sollen? – Bibliotheken – Frameworks – andere Projekte – etc. Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 10/?
  • 11. „Projektfremde“ Targets ClassA ClassB ClassC AspectX ConcernX ConcernX ConcernX ConcernX JARs Projekt-Sourcen App-Classloader Java Virtual Machine Java Virtual Machine Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 11/?
  • 12. Variante 1: Compile-Time • Der Compiler bekommt die JARs und webt die Aspekte direkt in die JARs ein • Vor- und Nachteile: + Direkt in der IDE + Zur Auslieferung ist alles fertig - Alle Libs und Bibliotheken müssen bekannt und veränderbar sein - Wenn sich etwas verändert, muss neu gebaut werden Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 12/?
  • 13. Variante 2: Load-Time • Aspect-Weaving beim Laden der Klassen in die VM (Load-Time Weaving - LTW) • Vor- und Nachteile: + Kann sogar mit System-Libs umgehen + Funktioniert, auch wenn sich etwas verändert + Es müssen nicht alle Libs bekannt sein - Kostet einmalig beim Laden der Klasse Performance - Man sieht nicht alles in der IDE Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 13/?
  • 14. Load-Time Weaving • Modularisierung kann lange aufrecht erhalten werden • Aber nur, solange Aspekte und Klassen durch den gleichen Classloader geladen werden – Normalerweise der App-Classloader Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 14/?
  • 15. Aspekte und Bundles • Im Kontext von OSGi werden Klassen innerhalb von Bundles gekapselt – Echte Modularisierung oberhalb von Packages • Unser Ziel: Aspekte in Bundles modularisieren • Aber: Jedes Bundle hat einen eigenen Classloader Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 15/?
  • 16. LTW und OSGi ? • OSGi basiert auf einer ausgefeilten Class Loading Architecture. • AspectJ Doc: „All load-time weaving is done in the context of a class loader …“. Herausforderung: Wie können die beiden Ansätze zusammengebracht werden? Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 16/?
  • 17. LTW und OSGi ? ClassA ClassB ClassC AspectX ConcernX ConcernX ConcernX ConcernX ? ? Bundle A Bundle B Bundle C Bundle-Classloader Bundle-Classloader Bundle-Classloader Java Virtual Machine Java Virtual Machine Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 17/?
  • 18. LTW in OSGi integrieren Lösung: OSGi-Classloader erledigen das Aspect-Weaving beim Laden einer Klasse • Aspekte werden in Bundles verpackt. • OSGi-Runtime wird angepasst, sodass das Weaving beim Class Loading erfolgt. Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 18/?
  • 19. Abhängigkeiten • Weaving erzeugt neue Abhängigkeiten, die nicht im Bundle-Manifest definiert sind. BundleA BundleX <<pointcut || advice>> ClassA AspectX <<weaving>> Herausforderung: Wie können die Aspekte von der Klasse aufgelöst werden? Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 19/?
  • 20. Dynamische Abhängigkeiten Lösung: Die Weaving-Runtime fügt die benötigten Abhängigkeiten dynamisch ein. • Dazu muss die OSGi-Runtime entsprechend angepasst werden. Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 20/?
  • 21. Equinox Aspects • Equinox-Incubator-Project – www.eclipse.org/equinox/incubator/aspects • Framework Ext. org.aspectj.osgi. • ClassLoadingHook bindet Weaving ein. • BundleFileWrapperFactoryHook berücksichtigt die „neuen“ Abhängigkeiten. • Weaving und Caching als OSGi-Services. Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 21/?
  • 22. Equinox Aspects verwenden 1 • aop.xml-Dateien: – Nur die aufgeführten Aspekte werden beim Weaving berücksichtigt. – Müssen in exportierten Packages liegen. – Werden bekannt gegeben über: org.aspectj.weaver.loadtime.configuration, z.B. …configuration=org/aspectj/aop.xml. Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 22/?
  • 23. Equinox Aspects verwenden 2 • Spezielle Manifest-Header für Aspect-Bundles, z.B. Eclipse-SupplementBundle. • Aufgeführte Bundles erhalten zur Laufzeit Abhängigkeit auf das Aspect-Bundle. BundleA BundleX Eclipse-SupplementBundle ClassA AspectX Require-Bundle Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 23/?
  • 24. Equinox Aspects verwenden 3 • Co-Location von org.eclipse.osgi und org.aspectj.osgi • osgi.framework.extensions=org.aspectj.osgi Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 24/?
  • 25. Demo: Equinox Aspects Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 25/?
  • 26. AJEER • „AspectJ-enabled Eclipse Runtime“: – Frühes Projekt zu AspectJ-Load-Time-Weaving für die Eclipse-Runtime • Gab es schon für Eclipse 2.1, jetzt bis 3.3 – Aspekte werden per Extension-Point bekanntgemacht • Mündet in Equinox Aspects Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 26/?
  • 27. Anwendungsfall: Security • Was soll erreicht werden? – Actions deaktivieren – Ausführung von Actions verhindern • Umsetzungsmöglichkeiten – Eigene Basisklasse für Actions einführen – Capabilities – Aspekte nutzen Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 27/?
  • 28. AJEER verwenden 1 • Security Aspekt in separatem Bundle • Actions in anderen Bundles werden advised AJEER Security-Bundle org.eclipse.ajeer.weavingruntime.aspects SecurityAspect BundleA BundleB BundleC ActionA ActionB ActionC Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 28/?
  • 29. AJEER verwenden 2 Aspekt definieren Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 29/?
  • 30. AJEER verwenden 3 Aspekt über Extension Point anmelden <extension point=quot;org.eclipse.ajeer.weavingruntime.aspectsquot;> <aspect class=quot;jax.security.AuthorizationAspectquot;/> </extension> Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 30/?
  • 31. Demo: AJEER Aspects Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 31/?
  • 32. Security für Enterprise RCP AJEER org.eclipse.ajeer.weavingruntime.aspects AccessControl Security-Bundle SecurityAspect Security-Connector Authenticator Frontend Backend Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 32/?
  • 33. Vielen Dank… • … für die Aufmerksamkeit!!! Martin Lippert (martin.lippert@akquinet.de) Peter Friese (peter.friese@gentleware.com) Heiko Seeberger (heiko.seeberger@allianz.at) Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 33/?
  • 34. Zusatzmaterial • Wie genau funktionieren die Adaptor-Hooks für Equinox? Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 34/?
  • 35. Equinox Hookable Adaptor • Equinox ist sehr flexibel: – FrameworkAdaptor impl. oder erweitern. – Hookable Adaptor (seit 3.2) bietet Hooks für „die wichtigsten“ Funktionalitäten. • Hooks verwenden: – Framework Extension Bundle. – HookConfigurator registriert Hooks. Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 35/?
  • 36. Demo: Equinox Hookable Adaptor Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 36/?