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: Se...
Aspektorientierte Programmierung

• Modularisierung mit OO-Mitteln ist gut
      – Klassen, Interfaces, Vererbung, etc.
• ...
AOP im Einsatz

• Mittlerweile etabliertes Werkzeug
      – AspectJ: Eine mächtige Spracherweiterung für Java
      – Spri...
AspectJ = AOP für Java

• Mächtige AOP-Erweiterung für Java
• Eclipse-Projekt: www.eclipse.org/aspectj
• Gute Tool-Unterst...
Wie funktioniert es?

• Der Standard-Fall:
      – AspectJ compiliert die Aspekte und verwebt diese
        (Compile-Time ...
Der Standard-Fall



                 ClassA               ClassB              ClassC    AspectX

                        ...
Aspect-Libraries

• Aspekte werden mit AspectJ compiliert und in ein
  JAR-File verpackt
      – Z.B. auch abstrakte Aspek...
Aspect-Libraries



                 ClassA               ClassB              ClassC          AspectX

                   ...
„Projektfremde“ Targets

• Was passiert, wenn sich Aspekte auf
  vorcompilierte Klassen auswirken sollen?
      –   Biblio...
„Projektfremde“ Targets



                 ClassA               ClassB              ClassC        AspectX

              ...
Variante 1: Compile-Time

• Der Compiler bekommt die JARs und webt die
  Aspekte direkt in die JARs ein
• Vor- und Nachtei...
Variante 2: Load-Time

• Aspect-Weaving beim Laden der Klassen in die
  VM (Load-Time Weaving - LTW)
• Vor- und Nachteile:...
Load-Time Weaving

• Modularisierung kann lange aufrecht erhalten
  werden
• Aber nur, solange Aspekte und Klassen durch
 ...
Aspekte und Bundles

• Im Kontext von OSGi werden Klassen innerhalb
  von Bundles gekapselt
      – Echte Modularisierung ...
LTW und OSGi ?

• OSGi basiert auf einer ausgefeilten
  Class Loading Architecture.
• AspectJ Doc: „All load-time weaving ...
LTW und OSGi ?



           ClassA               ClassB                          ClassC            AspectX

             ...
LTW in OSGi integrieren

   Lösung: OSGi-Classloader erledigen das
   Aspect-Weaving beim Laden einer Klasse

• Aspekte we...
Abhängigkeiten

• Weaving erzeugt neue Abhängigkeiten,
  die nicht im Bundle-Manifest definiert sind.
                   B...
Dynamische Abhängigkeiten

   Lösung: Die Weaving-Runtime fügt die
   benötigten Abhängigkeiten dynamisch ein.

• Dazu mus...
Equinox Aspects

• Equinox-Incubator-Project
      – www.eclipse.org/equinox/incubator/aspects
• Framework Ext. org.aspect...
Equinox Aspects verwenden 1

• aop.xml-Dateien:
      – Nur die aufgeführten Aspekte werden beim Weaving
        berücksic...
Equinox Aspects verwenden 2

• Spezielle Manifest-Header für Aspect-Bundles,
  z.B. Eclipse-SupplementBundle.
• Aufgeführt...
Equinox Aspects verwenden 3

• Co-Location von org.eclipse.osgi und
  org.aspectj.osgi
• osgi.framework.extensions=org.asp...
Demo: Equinox Aspects




Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP
                                   ...
AJEER

• „AspectJ-enabled Eclipse Runtime“:
      – Frühes Projekt zu AspectJ-Load-Time-Weaving für die
        Eclipse-Ru...
Anwendungsfall: Security

• Was soll erreicht werden?
      – Actions deaktivieren
      – Ausführung von Actions verhinde...
AJEER verwenden 1

• Security Aspekt in separatem Bundle
• Actions in anderen Bundles werden advised
 AJEER               ...
AJEER verwenden 2
Aspekt definieren




Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP
                     ...
AJEER verwenden 3

Aspekt über Extension Point anmelden
<extension
    point=quot;org.eclipse.ajeer.weavingruntime.aspects...
Demo: AJEER Aspects




Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP
                                     ...
Security für Enterprise RCP
AJEER
                   org.eclipse.ajeer.weavingruntime.aspects    AccessControl




Securit...
Vielen Dank…

• … für die Aufmerksamkeit!!!




      Martin Lippert (martin.lippert@akquinet.de)
      Peter Friese (pete...
Zusatzmaterial

• Wie genau funktionieren die Adaptor-Hooks für
  Equinox?




Lippert, Friese, Seeberger - AOP im Einsatz...
Equinox Hookable Adaptor

• Equinox ist sehr flexibel:
      – FrameworkAdaptor impl. oder erweitern.
      – Hookable Ada...
Demo: Equinox Hookable Adaptor




Lippert, Friese, Seeberger - AOP im Einsatz mit OSGi und RCP
                          ...
Nächste SlideShare
Wird geladen in …5
×

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

1.417 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

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

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

×