SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
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/?

Mais conteúdo relacionado

Destaque

Wie Die Amis Einkaufen
Wie Die Amis EinkaufenWie Die Amis Einkaufen
Wie Die Amis EinkaufenFraenker
 
Semejanzas y diferencias del uso de las tic en el conductismo y constructivismo
Semejanzas y diferencias del uso de las tic en el conductismo y constructivismoSemejanzas y diferencias del uso de las tic en el conductismo y constructivismo
Semejanzas y diferencias del uso de las tic en el conductismo y constructivismoAdriana Sandoval P.
 
funciones trigonometricas
funciones trigonometricasfunciones trigonometricas
funciones trigonometricaseduart789
 
Sanguinettipc3tp3
Sanguinettipc3tp3Sanguinettipc3tp3
Sanguinettipc3tp3gianecruz
 
Aleh parque
Aleh parqueAleh parque
Aleh parquetauritho
 
Milk volovikova proyecto de colaboraciòn spanish
Milk volovikova proyecto de colaboraciòn spanishMilk volovikova proyecto de colaboraciòn spanish
Milk volovikova proyecto de colaboraciòn spanishalex7usa
 
Red de Comunicadores de Vallenar
Red de Comunicadores de Vallenar Red de Comunicadores de Vallenar
Red de Comunicadores de Vallenar ARSChile
 
Estatutoccca decreto 194
Estatutoccca decreto 194Estatutoccca decreto 194
Estatutoccca decreto 194Marco Quimi
 
Arbeiten mit Streams von Twitter & Co.
Arbeiten mit Streams von Twitter & Co.Arbeiten mit Streams von Twitter & Co.
Arbeiten mit Streams von Twitter & Co.Marcus Schwarze
 

Destaque (20)

Presentación1
Presentación1Presentación1
Presentación1
 
Wie Die Amis Einkaufen
Wie Die Amis EinkaufenWie Die Amis Einkaufen
Wie Die Amis Einkaufen
 
Medienkompetenz in Bewegung
Medienkompetenz in BewegungMedienkompetenz in Bewegung
Medienkompetenz in Bewegung
 
Semejanzas y diferencias del uso de las tic en el conductismo y constructivismo
Semejanzas y diferencias del uso de las tic en el conductismo y constructivismoSemejanzas y diferencias del uso de las tic en el conductismo y constructivismo
Semejanzas y diferencias del uso de las tic en el conductismo y constructivismo
 
Naren correa
Naren correaNaren correa
Naren correa
 
Importante johan
Importante johanImportante johan
Importante johan
 
funciones trigonometricas
funciones trigonometricasfunciones trigonometricas
funciones trigonometricas
 
Jefferson rubiano reyes
Jefferson rubiano reyesJefferson rubiano reyes
Jefferson rubiano reyes
 
Práctica 24
Práctica 24Práctica 24
Práctica 24
 
Gestalt
GestaltGestalt
Gestalt
 
Medioevo-phpapp02
Medioevo-phpapp02Medioevo-phpapp02
Medioevo-phpapp02
 
Sanguinettipc3tp3
Sanguinettipc3tp3Sanguinettipc3tp3
Sanguinettipc3tp3
 
Arte egipcio
Arte egipcioArte egipcio
Arte egipcio
 
Aleh parque
Aleh parqueAleh parque
Aleh parque
 
Milk volovikova proyecto de colaboraciòn spanish
Milk volovikova proyecto de colaboraciòn spanishMilk volovikova proyecto de colaboraciòn spanish
Milk volovikova proyecto de colaboraciòn spanish
 
Cruz soriano
Cruz sorianoCruz soriano
Cruz soriano
 
Red de Comunicadores de Vallenar
Red de Comunicadores de Vallenar Red de Comunicadores de Vallenar
Red de Comunicadores de Vallenar
 
Resumenes y cuadro reseña
Resumenes y cuadro reseñaResumenes y cuadro reseña
Resumenes y cuadro reseña
 
Estatutoccca decreto 194
Estatutoccca decreto 194Estatutoccca decreto 194
Estatutoccca decreto 194
 
Arbeiten mit Streams von Twitter & Co.
Arbeiten mit Streams von Twitter & Co.Arbeiten mit Streams von Twitter & Co.
Arbeiten mit Streams von Twitter & Co.
 

Mais de Heiko Seeberger

Scaladays 2011 - The Ease of Scalaz
Scaladays 2011 - The Ease of ScalazScaladays 2011 - The Ease of Scalaz
Scaladays 2011 - The Ease of ScalazHeiko Seeberger
 
RheinJUG 2010 - Sprechen Sie Scala?
RheinJUG 2010 - Sprechen Sie Scala?RheinJUG 2010 - Sprechen Sie Scala?
RheinJUG 2010 - Sprechen Sie Scala?Heiko Seeberger
 
Objektforum 2010 - Sprechen Sie Scala?
Objektforum 2010 - Sprechen Sie Scala?Objektforum 2010 - Sprechen Sie Scala?
Objektforum 2010 - Sprechen Sie Scala?Heiko Seeberger
 
JM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala ReviewJM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala ReviewHeiko Seeberger
 
OSGi DevCon Europe 09 - OSGi on Scala
OSGi DevCon Europe 09 - OSGi on ScalaOSGi DevCon Europe 09 - OSGi on Scala
OSGi DevCon Europe 09 - OSGi on ScalaHeiko Seeberger
 
JAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components ModelsJAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components ModelsHeiko Seeberger
 
Eclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by ContractEclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by ContractHeiko Seeberger
 
Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der DreiEclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der DreiHeiko Seeberger
 
Eclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance LoggingEclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance LoggingHeiko Seeberger
 
Eclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on EquinoxEclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on EquinoxHeiko Seeberger
 
Eclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterHeiko Seeberger
 

Mais de Heiko Seeberger (20)

Scaladays 2011 - The Ease of Scalaz
Scaladays 2011 - The Ease of ScalazScaladays 2011 - The Ease of Scalaz
Scaladays 2011 - The Ease of Scalaz
 
Java Magazin - Lift
Java Magazin - LiftJava Magazin - Lift
Java Magazin - Lift
 
JavaSPEKTRUM - Scala 3
JavaSPEKTRUM - Scala 3JavaSPEKTRUM - Scala 3
JavaSPEKTRUM - Scala 3
 
JavaSPEKTRUM - Scala 2
JavaSPEKTRUM - Scala 2JavaSPEKTRUM - Scala 2
JavaSPEKTRUM - Scala 2
 
JavaSPEKTRUM - Scala 1
JavaSPEKTRUM - Scala 1JavaSPEKTRUM - Scala 1
JavaSPEKTRUM - Scala 1
 
RheinJUG 2010 - Sprechen Sie Scala?
RheinJUG 2010 - Sprechen Sie Scala?RheinJUG 2010 - Sprechen Sie Scala?
RheinJUG 2010 - Sprechen Sie Scala?
 
Objektforum 2010 - Sprechen Sie Scala?
Objektforum 2010 - Sprechen Sie Scala?Objektforum 2010 - Sprechen Sie Scala?
Objektforum 2010 - Sprechen Sie Scala?
 
W-JAX 09 - ScalaModules
W-JAX 09 - ScalaModulesW-JAX 09 - ScalaModules
W-JAX 09 - ScalaModules
 
W-JAX 09 - Lift
W-JAX 09 - LiftW-JAX 09 - Lift
W-JAX 09 - Lift
 
JM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala ReviewJM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala Review
 
JM 08/09 - ScalaModules
JM 08/09 - ScalaModulesJM 08/09 - ScalaModules
JM 08/09 - ScalaModules
 
OSGi DevCon Europe 09 - OSGi on Scala
OSGi DevCon Europe 09 - OSGi on ScalaOSGi DevCon Europe 09 - OSGi on Scala
OSGi DevCon Europe 09 - OSGi on Scala
 
JAX 09 - OSGi on Scala
JAX 09 - OSGi on ScalaJAX 09 - OSGi on Scala
JAX 09 - OSGi on Scala
 
JAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components ModelsJAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components Models
 
JAX 08 - Agile RCP
JAX 08 - Agile RCPJAX 08 - Agile RCP
JAX 08 - Agile RCP
 
Eclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by ContractEclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by Contract
 
Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der DreiEclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der Drei
 
Eclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance LoggingEclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance Logging
 
Eclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on EquinoxEclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on Equinox
 
Eclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matter
 

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

  • 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/?