Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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.427 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/?

×