• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
W-JAX 07 - AOP im Einsatz mit OSGi und RCP
 

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

on

  • 1,858 views

 

Statistics

Views

Total Views
1,858
Views on SlideShare
1,848
Embed Views
10

Actions

Likes
0
Downloads
11
Comments
0

1 Embed 10

http://www.slideshare.net 10

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • AOP im Einsatz mit OSGi und RCP Martin Lippert, Peter Friese und Heiko Seeberger
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • „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/?
    • „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/?
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • 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/?
    • Demo: Equinox Aspects Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 25/?
    • 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/?
    • 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/?
    • 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/?
    • AJEER verwenden 2 Aspekt definieren Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 29/?
    • 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/?
    • Demo: AJEER Aspects Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 31/?
    • 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/?
    • 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/?
    • Zusatzmaterial • Wie genau funktionieren die Adaptor-Hooks für Equinox? Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 34/?
    • 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/?
    • Demo: Equinox Hookable Adaptor Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP 36/?