SlideShare ist ein Scribd-Unternehmen logo
Architektur                                                                                      AspectJ und Equinox




Performance Logging mit AspectJ und der Eclipse-Plug-in-Architektur



Säuberlich getrennt
 >> heiko seeberger und harald griesbeck

                                                                                           bedingungen, z.B. für den Build-Prozess
 Performance-Kennzahlen einer Software durch Logging im produktiven                        und den Einsatz von AspectJ, worauf wir
                                                                                           noch detailliert eingehen werden.
 Betrieb zu ermitteln, ist geradezu eine Paradedisziplin für aspekt-                           Eine wichtige Forderung an die ABS-
 orientierte Programmierung. Die Theorie ist simpel, in der Praxis sieht                   Anwendung ist die Einhaltung der in Form
                                                                                           von Service Level Agreements zugesicher-
 es etwas anders aus. In einer umfassenden Geschäftsanwendung
                                                                                           ten Antwortzeiten. Schließlich sind für ei-
 kommen AspectJ und die Eclipse-Plug-in-Architektur bei der Lösung                         ne unternehmenskritische Anwendung die
                                                                                           Verfügbarkeit und Performance noch vor
 dieses Cross-Cutting Concerns zum Einsatz.
                                                                                           der Funktionalität die wichtigsten Anfor-
                                                                                           derungen, so Dr. Ralf Schneider, CIO der
                                                                                           Allianz Deutschland AG. Zur Sicherstel-

D                                                                                          lung der Performance ist ein verlässliches
                                               Geschäftslogik und zukünftig auch das
     ie Allianz Deutschland AG führt der-
                                                                                           Reporting der Performance-Kennzahlen
                                               User Interface auf der Programmierspra-
     zeit in einem strategischen Großpro-
                                                                                           im produktiven Betrieb erforderlich, um
                                               che Java und der Eclipse-Plattform [3]
jekt ein neues Softwaresystem für alle Be-
                                                                                           beispielsweise die Frage „Wie lange muss
                                               basieren. Die Komponentenarchitektur
lange des Versicherungs-Kerngeschäfts
                                                                                           ein Sachbearbeiter warten, bis das Er-
                                               und Erweiterungsmöglichkeiten von
ein [1], [2]. Die neue Software, das Allianz
                                                                                           gebnis der Personensuche, sortiert nach
                                               Equinox [4] (ehemals Eclipse Runtime
Business System (ABS), stellt den Kunden
                                                                                           Name und Postleitzahl, angezeigt wird?“
                                               Core) stellen wesentliche Merkmale der
in den Mittelpunkt und ermöglicht dem
                                                                                           beantworten zu können. Anders als beim
                                               ABS-Architektur dar und erfüllen die für
Sachbearbeiter eine umfassende Bearbei-
                                                                                           Profiling während der Entwicklungspha-
                                               ein strategisches Anwendungssystem
tung der Kundenanliegen, die sich durch
                                                                                           se geht es hierbei um die kontinuierliche
                                               wichtigen Anforderungen an Modula-
die täglichen Telefonate, den Brief- und
                                                                                           Performance-Ermittlung „in Produkti-
                                               rität, Flexibilität und Erweiterbarkeit.
E-Mail-Verkehr ergeben. Die ABS-An-
                                                                                           on“ mit dem Ziel, rasch Gegenmaßnah-
                                               Gleichzeitig definiert die Verwendung der
wendung beruht auf einer modernen,
                                                                                           men einleiten zu können, wenn eine signi-
                                               Eclipse-Plattform verschiedene Rahmen-
mehrschichtigen Architektur, bei der die



20    eclipse magazin Vol. 15                                                                                     www.eclipse-magazin.de
Architektur
AspectJ und Equinox



                                               gang nennt man Weaving. AspectJ bietet
fikante Verschlechterung der Performance                                                  komplexe Problemstellungen leichter
                                               zum einen die Möglichkeit, das Weaving
erkannt wird. In der ABS-Anwendung                                                        lösen lassen, wenn sie in überschaubare
                                               beim Kompilieren durchzuführen (Com-
werden hierfür im Prinzip Start- und End-                                                 und disjunkte „Häppchen“ zerlegt sind.
                                               pile-time Weaving), zum anderen erlaubt
Zeitpunkte von definierten Messstrecken                                                   Software sollte somit aus Modulen be-
                                               AspectJ, das Weaving zur Laufzeit – ge-
in Logfiles ausgegeben, zentral gesammelt                                                 stehen, die möglichst wenig überlappen-
                                               nauer gesagt, beim Laden der betroffenen
und dann ausgewertet.                                                                     de Funktionalität aufweisen. Java bietet
                                               Klassen durch die Java Virtual Machine –
    Dieses Performance Logging ist ein                                                    als objektorientierte Sprache bereits
                                               durchzuführen (Load-time Weaving). Bei-
typischer Cross-Cutting Concern [5], hat                                                  strukturelle Konzepte zur Modularisie-
                                               de Varianten ermöglichen das Einweben
also nichts mit der grundlegenden bzw.                                                    rung, z.B. Packages, Klassen, Methoden
                                               von Aspekten in fremden Libraries. Im
primären Funktionalität zu tun, wie etwa                                                  etc. Mit dieser Strukturierung werden
                                               konkreten ABS-Projekt besteht die Not-
der Suche von Personen anhand von Na-                                                     die Primary Concerns abgebildet, z.B.
                                               wendigkeit, Performance-Messpunkte
me und Postleitzahl. Vielmehr durchsetzt                                                  eine Klasse Person mit den Properties
                                               im sogenannten ABS-Kern, der als fertige
der Code zum Ausgeben der Messpunkte                                                      Vor- und Nachname. In der Praxis gibt
                                               Plattform zur Verfügung steht, einzubau-
vielerorts den primären Code. Diese Ver-                                                  es jedoch so gut wie immer Belange, die
                                               en. Mithilfe der Weaving-Technik kann
mischung verschiedener Belange verletzt                                                   sich mithilfe der objektorientierten Pro-
                                               diese Anforderung elegant gelöst werden.
das bewährte Prinzip der Separation of                                                    grammierung nicht modularisieren las-
Concerns [6] und es entsteht dadurch                                                      sen. Typische Beispiele für Cross-Cutting
                                               Modularisierung par excellence
unverständlicher und schlecht wartbarer                                                   Concerns sind Querschnittsfunktionen
Programm-Code. Die aspektorientierte                                                      wie Logging, Tracing, Security usw., also
                                               Das bereits erwähnte Prinzip der Se-
Programmierung [7] adressiert dieses Prob-                                                nichtfunktionale Anforderungen. Mit
                                               paration of Concerns besagt, dass sich
lem und bietet die Möglichkeit, auch die
Cross-Cutting Concerns zu modularisie-
ren, wodurch wiederum eine verbesserte
Softwarequalität erreicht wird. Da die
ABS-Anwendung mit der Programmier-
sprache Java und mit der Entwicklungs-
umgebung Eclipse SDK entwickelt wird,
bietet sich die Verwendung von AspectJ
[8] an. AspectJ stellt den Quasi-Standard
für Aspektorientierung mit Java dar und
verfügt mit AJDT [9] über eine hervorra-
gende Integration in das Eclipse SDK. As-
pectJ ergänzt die objektorientierte Spra-
                                                                                      Anzeige
che Java um aspektorientierte Konzepte.
Dabei werden die so genannten Primary
Concerns, d.h., die grundlegenden An-
forderungen an ein Software-System, mit
objektorientierten Mitteln entwickelt,
z.B. mit Java-Konstrukten wie Packages,
Klassen, Methoden etc. Die Cross-Cutting
Concerns werden dann mit den erweiter-
ten Sprachmitteln von AspectJ, z.B. mit As-
pekten, Advices und Pointcuts, umgesetzt.
Für Details sei auf die Dokumentation auf
der AspectJ-Website verwiesen.
    Ein weiterer und entscheidender
Punkt, der im konkreten Fall zum Einsatz
von aspektorientierter Programmierung
führte, ist die Fähigkeit von AspectJ, nicht
nur auf Quellcode-Ebene arbeiten zu kön-
nen, sondern auch mit vorhandenen Lib-
raries. Das bedeutet, dass auch in vorkom-
piliertem Code Aspekte eingebaut werden
können. Die getrennten Belange, also der
primäre Code und die Cross-Cutting Con-
cerns, werden in der aspektorientierten
Programmierung getrennt erstellt und
müssen in einem späteren Schritt wieder
zusammengeführt werden. Diesen Vor-



                                                                                                                                     21
www.eclipse-magazin.de                                                                                     eclipse magazin Vol. 15
Architektur                                                                                             AspectJ und Equinox



                                                      den Cross-Cutting Concerns durch As-          gab es Bedenken hinsichtlich der Ver-
                                                      pekte modularisiert und diese wiederum        wendung des Patches. Diese wurden in
                                                      in Aspekt-Bundles.                            einem Smoke-Test bestätigt: einerseits
                                                          Die separierten Belange müssen            durch Warnmeldungen, die ohne Patch
                                                      letztendlich wieder zusammengeführt           nicht auftraten, andererseits durch Ab-
Abb. 1: Cross-Cutting Concerns
                                                      werden. Dieser Vorgang wird, wie be-          brüche beim Kompilieren von reinen
werden in Aspekten modularisiert
                                                      reits erwähnt, als Weaving bezeichnet.        Ressource-Plug-ins, d.h. Plug-ins ohne
                                                      Bei AspectJ gibt es dafür zwei Methoden:      Klassen. Letztendlich erschien dadurch
                                                      Compile-time Weaving und Load-time            der Einsatz von AspectJ Compile-time
                                                      Weaving. Beim Compile-time Weaving            Weaving als zu riskant und die hohen
                                                      werden Klassen und Aspekte bereits            Abhängigkeiten der einzelnen Versions-
                                                      durch den AspectJ Compiler während            stände als zu unflexibel, sodass Compile-
Abb. 2: Marker zeigen die Stellen, an denen Aspekte
verwoben werden
                                                      des Build-Prozesses zusammengeführt           time Weaving für die ABS-Anwendung
                                                      und der vollständige Byte-Code erzeugt.       nicht zum Einsatz kommt.
                                                      Somit ist der AOP-Ansatz für die Lauf-            Bei Load-time Weaving findet die
                                                      zeitumgebung völlig transparent. Ein          Zusammenführung von Klassen und
                                                      weiterer Vorteil von AspectJ Compile-         Aspekten erst zur Laufzeit – genauer ge-
                                                      time Weaving ist die gute Unterstützung       sagt beim Classloading – statt. Dazu ist
Abb. 3: Weaving erzeugt eine Abhängigkeit zum
                                                      in der Entwicklungsumgebung durch die         es nötig, das Classloading entsprechend
Aspekt
                                                      AJDT Plug-ins. So werden zum Beispiel         zu modifizieren. AspectJ bietet dafür eine
                                                      durch Marker diejenigen Stellen hervor-       Unterstützung in Form von JVM Agents
                                                      gehoben, an denen Aspekte verwoben            oder speziellen ClassLoaders [15] an.
aspektorientierter Programmierung las-
                                                      werden (Abb. 2). Auch das Debugging           Load-time Weaving bietet den Vorteil,
sen sich auch diese Cross-Cutting Con-
                                                      funktioniert völlig transparent.              die Auswahl der Klassen, die mit Aspek-
cerns modularisieren, sodass Klassen
                                                                                                    ten verwoben werden, nicht von Anfang
und Aspekte bzw. deren Methoden und
                                                      In der Praxis zu riskant                      an zu begrenzen. Während beim Com-
Advices keine überlappenden Belange
                                                                                                    pile-time Weaving nur die beim Build-
mehr enthalten (Abb. 1).                              Allerdings verlässt Compile-time Wea-
                                                                                                    Prozess vorliegenden Klassen verwoben
    Neben dieser Form von Modularisie-                ving die Modularisierung bereits beim
                                                                                                    werden, können später hinzukommen-
rung auf „Mikroebene“ dient das Kon-                  Build-Prozess. Der oben aufgeführte
                                                                                                    de nicht mehr berücksichtigt werden.
zept von Komponenten [10] ebenfalls zur               Vorteil der Kombination von AspectJ
                                                                                                    Für Security-Aspekte kann dies ein sehr
Separation of Concerns, jedoch auf grö-               mit den dynamischen Eigenschaften von
                                                                                                    wichtiges Kriterium sein, z.B. wenn vor
berer Ebene. Equinox implementiert mit                OSGi geht dadurch verloren. Abgesehen
                                                                                                    jeglicher Ausführung einer execute()-
OSGi [11] eine dynamische Komponen-                   von diesen prinzipiellen Gesichtspunk-
                                                                                                    Methode eines IAction-Interfaces zuvor
tenarchitektur, welche die Zusammen-                  ten spielt natürlich die Praxistauglichkeit
                                                                                                    die Authentifizierung und Autorisierung
führung bzw. Installation von Kompo-                  eine entscheidende Rolle. Umfangreiche
                                                                                                    überprüft werden sollen.
nenten (Bundles im OSGi-Jargon) zum                   Anwendungen werden in der Regel nicht
                                                                                                        Der große Vorteil von Load-time
spätestmöglichen Zeitpunkt erlaubt,                   auf einem Entwicklerrechner „gebaut“,
                                                                                                    Weaving ist der Erhalt der Modulari-
nämlich zur Laufzeit. Somit lassen sich               sondern es kommt ein zentraler Build-
                                                                                                    sierung über den Build-Prozess hinweg
Bundles von zusammengehörigen Klas-                   Prozess zum Einsatz. Eclipse stellt hierfür
                                                                                                    bis zum Zeitpunkt der Ausführung.
sen oder Aspekten bilden, z.B. ein Bundle             den PDE Build [12] zur Verfügung, der
                                                                                                    Die Builds von Primary Concerns und
Person für die Fachlichkeit rund um das               auf Apache Ant [13] basiert. Dieser kann
                                                                                                    Querschnittsfunktionen können sepa-
Domain Object Person und ein Bundle                   zum heutigen Stand (Eclipse 3.3.1) nicht
                                                                                                    rat erfolgen. Natürlich müssen die As-
Security mit Aspekten für Authentifizie-              konfiguriert werden, um einen anderen
                                                                                                    pekte, auch wenn das Weaving erst beim
rung und Autorisierung. Diese Bundles                 Compiler als den Standard-Compiler zu
                                                                                                    Classloading erfolgt, übersetzt werden.
sind in sich selbst konsistent und können             verwenden [14]. Daher liefert AJDT ei-
                                                                                                    Allerdings reicht es nun aus, nur dieje-
unter Berücksichtigung ihrer Abhängig-                nen Patch für den PDE Build: Die Datei
                                                                                                    nigen Bundles, die Aspekte enthalten,
keiten isoliert entwickelt und getestet               pdebuild.jar im Plug-in org.eclipse.pde.
                                                                                                    mit dem AspectJ Compiler zu überset-
werden. Wenn die Abhängigkeiten, die                  build muss durch eine modifizierte Datei
                                                                                                    zen. Dafür kann entweder ein separater
jedes Bundle explizit deklarieren muss,               ersetzt werden. Dadurch werden in der
                                                                                                    PDE Build mit Patch aufgesetzt werden
minimal gehalten und geschickt entwor-                Folge alle Plug-ins nicht mehr mit dem
                                                                                                    oder es wird einfach der Export aus der
fen werden, z.B. in Form von Interfaces,              originalen PDE Compiler übersetzt, son-
                                                                                                    Entwicklungsumgebung verwendet. In
dann ergibt sich automatisch ein hoher                dern mit dem AspectJ Compiler. Bei die-
                                                                                                    beiden Fällen kann der ursprüngliche
Grad an Separierung. In großen Projek-                sem Vorgehen ist schon alleine aufgrund
                                                                                                    PDE Build für alle primären Bundles
ten hat man hierdurch die Möglichkeit,                möglicher Versions-Inkompatibilitäten
                                                                                                    unverändert bleiben. Im konkreten Fall
die separierten Teile in unterschiedlichen            allerhöchste Vorsicht geboten. Der ge-
                                                                                                    der ABS-Anwendung wird als pragmati-
Teams entwickeln zu lassen. Wie man                   nannte Patch wird von AJDT erst seit
                                                                                                    sche Zwischenlösung der Export aus der
sieht, ergänzen sich OSGi und AspectJ                 Version 1.4.1 geliefert, die kompatibel
                                                                                                    Entwicklungsumgebung verwendet, da
hervorragend, um eine durchgehende                    zu Eclipse 3.2.1 ist. Da die ABS-Anwen-
                                                                                                    AspectJ derzeit nur für das Performance
Modularisierung zu erzielen. Dabei wer-               dung auf Eclipse 3.2.0 entwickelt wird,



22      eclipse magazin Vol. 15                                                                                            www.eclipse-magazin.de
Architektur                                                                                                  AspectJ und Equinox



                                                       det werden, sondern das Load-time Wea-        Darüber hinaus besteht Equinox As-
                                                       ving muss in das Equinox Classloading         pects aus dem obligatorischen Bundle
                                                       integriert werden.                            org.aspectj.osgi.service.weaving, das
                                                           Weiter müssen Bundles unter OSGi          den Weaving Service anbietet. Für die J9-
                                                       ihre Abhängigkeiten explizit deklarie-        JVM von IBM stellt das optionale Bundle
                                                       ren. Zur Entwicklungszeit geschieht           org.aspectj.osgi.service.caching.j9 einen
                                                       dies durch Einträge im so genannten           Caching-Mechanismus zur Verfügung,
                                                       Bundle-Manifest. Zur Laufzeit sind für        wobei die Realisierung eines allgemeinen
Abb.	4:	Eclipse-SupplementBundle	
                                                       ein Bundle dann nur diejenigen Abhän-         Caching Services für beliebige JVMs eine
erzeugt	zur	Laufzeit	die	nötigen	Abhängigkeiten
                                                       gigkeiten sichtbar, die explizit importiert   noch offene Aufgabe der Community ist.
                                                       werden. Wenn eine Klasse mit einem As-
                                                                                                     Installieren und Konfigurieren von
                                                       pekt verwoben wird, entsteht dabei eine
                                                                                                     Equinox Aspects
                                                       neue Abhängigkeit von der verwobenen
                                                       Klasse zum Aspekt (Abb. 3).                   Equinox Aspects kann entweder aus dem
                                                           Zur Entwicklungszeit sind diese           Eclipse SDK über eine Update Site [18]
                                                       Abhängigkeiten natürlich noch nicht           installiert oder als ZIP-Archiv von der
                                                       vorhanden, denn schließlich werden            „Getting Started“-Seite [19] herunterge-
                                                       die Cross-Cutting Concerns durch die          laden werden. Da es sich hierbei um reine
Abb.	5:	Beispiel	in	Aktion:	Der	Aspekt	gibt	die	Aus-
                                                       aspektorientierte Programmierung              Runtime Plug-ins ohne Tooling oder an-
führungsdauer	aus
                                                       separiert, d.h. der „eigentliche“ Code        dere Integration in das SDK handelt, ist
                                                       kennt die Aspekte gar nicht. Die Bundles      es empfehlenswert, sie nicht in das SDK
                                                       können somit diese Abhängigkeiten, die        zu installieren, sondern die Plug-ins in
                                                       durch das Load-time Weaving entstehen,        die jeweilige Target Platform aufzuneh-
                                                       nicht a priori im Bundle-Manifest de-         men. Auf alle Fälle muss berücksichtigt
                                                       klarieren. Daher harmoniert Load-time         werden, dass Equinox Aspects wie jedes
                                                       Weaving nicht out-of-the-box mit OSGi,        Framework Extension Fragment un-
                                                       sondern bedarf besonderer Unterstüt-          bedingt im selben Verzeichnis wie das
                                                       zung: Die neuen Abhängigkeiten müssen         System Bundle org.eclipse.osgi abgelegt
                                                       den Bundles beim Laden dynamisch hin-         werden muss, da die Framework Exten-
                                                       zugefügt werden.                              sion sonst nicht gefunden und infolge-
                                                           Equinox bietet seit Version 3.2 mit       dessen ignoriert wird.
Abb.	6:	Launcher	für	das	Beispiel:	
                                                       dem so genannten Hookable Adaptor                 Damit die Bundles, auf denen die
Bundles	und	Start-Level
                                                       [16] eine sehr flexible Implementierung       Aspekte eines Aspekt-Bundles wirken
                                                       von OSGi, die es ermöglicht, zahlreiche       sollen, zur Laufzeit mit den nötigen Ab-
                                                       Funktionalitäten des Frameworks an-           hängigkeiten versehen werden können,
Logging verwendet wird und nur ein
                                                       zupassen oder zu erweitern. Über einen        führt Equinox Aspects neue Manifest-
Bundle mit Aspekten existiert.
                                                       HookConfigurator können verschiede-           Header ein, die in den Aspekt-Bundles
AspectJ Load-time                                      ne Hooks mit unterschiedlichen Funk-          verwendet werden:
Weaving unter Equinox                                  tionalitäten registriert werden, die vom
                                                       Hookable Adaptor während der Aus-             •	Eclipse-SupplementBundle
Viele der herausragenden Eigenschaf-
                                                       führung der jeweiligen Funktionalität         •	Eclipse-SupplementImporter
ten, die OSGi bietet, werden in Equinox
                                                       aufgerufen werden. Diese Klassen und          •	Eclipse-SupplementExporter
durch eine ausgefeilte Classloading-Stra-
                                                       Ressourcen werden in einem so genann-
tegie umgesetzt. Daher kann für AspectJ
                                                       ten Framework Extension Fragment ge-          Den unter Eclipse-SupplementBundle
Load-time Weaving unter Equinox nicht
                                                       bündelt, dessen Host Bundle das System        aufgeführten Bundles wird beim Laden
die oben erwähnte Standardunterstüt-
                                                       Bundle org.eclipse.osgi ist.                  dynamisch die Abhängigkeit vom As-
zung in Form von JVM Agents verwen-
                                                           Im Eclipse-Projekt Equinox Aspects        pekt-Bundle hinzugefügt. Analog dazu
                                                       [17] sind nun verschiedene Hooks reali-       werden bei Eclipse-SupplementImpor-
 Checkliste für                                        siert, insbesondere ein BundleFileWrap-       ter und Eclipse-SupplementExporter
 Aspekt-Bundles                                        perFactoryHook und ein ClassLoading-          importierte bzw. exportierte Packages
                                                       Hook, um AspectJ Load-time Weaving            hinzugefügt. Im mitgelieferten Beispiel
 Die folgenden Punkte müssen umgesetzt wer-
 den, damit Aspekt-Bundles „funktionieren“:            für Equinox zu ermöglichen. Das ver-          findet man im Bundle-Manifest des As-
                                                       wendete Framework Extension Frag-             pekt-Bundles de.metafinanz.demo.aop.
 •	 Einfügen	der	Supplement	Header	für	zu	
                                                       ment heißt org.aspectj.osgi, und über die     osgi.aspect den folgenden Eintrag:
    aspektierende Bundles/Packages
                                                       System Property osgi.framework.exten-
 •	 Exportieren	der	Packages	mit	Aspekten
                                                       sions wird es dem Hookabel Adaptor be-        Eclipse-SupplementBundle: de.metafinanz.demo.aop.osgi
 •	 Exportieren	des	Packages	mit	aop.xml	
                                                       kannt gegeben:
    (in der Regel org.aspectj)
                                                                                                     Dadurch wird das Bundle de.metafinanz.
 •	 Reexportieren	der	AspectJ	Library
                                                                                                     demo.aop.osgi zur Laufzeit mit einer
                                                       osgi.framework.extensions=org.aspectj.osgi




24      eclipse magazin Vol. 15                                                                                                   www.eclipse-magazin.de
Architektur
AspectJ und Equinox



Abhängigkeit auf das Aspekt-Bundle                         wichtig, dass die Aspekt-Bundles diese                     SDKs verwendet. Die oben aufgeführten
                                                           Abhängigkeit reexportieren:                                System Properties werden im Reiter Ar-
de.metafinanz.demo.aop.osgi.aspect
versehen (Abb. 4).                                                                                                    guments gesetzt und die zu verwenden-
   Für die Angabe der Bundles können                                                                                  den Bundles werden im Reiter Bundles
                                                           Require-Bundle: org.aspectj.runtime;visibility:=reexport
auch Wildcards verwendet werden, z.B.                                                                                 konfiguriert. Dabei ist es wichtig, den
                                                                                                                      Weaving Service (org.aspectj.osgi.service.
                                                           Eine Zusammenfassung der wichtigsten
                                                                                                                      weaving) zu starten, bevor zu aspektieren-
                                                           Konfigurationseinstellungen für die Ver-
Eclipse-SupplementBundle: de.metafinanz.*, org.eclipse.*
                                                                                                                      de Bundles geladen werden, z.B. indem ein
                                                           wendung von Equinox Aspects befindet
                                                                                                                      geeigneter Start-Level gesetzt wird.
Alle Bundles, die mit de.metafinanz oder                   sich im Kasten „Checkliste für Aspekt-
org.eclipse beginnen, erhalten in diesem                   Bundles“.
                                                                                                                      Fazit
Fall eine Abhängigkeit auf das Aspekt-
                                                           Beispiel
Bundle. Equinox Aspects verwendet zur                                                                                 Mit Equinox Aspects steht eine Frame-
Identifizierung der Aspekte, die beim                      Zur Verdeutlichung der vorgestellten                       work Extension für Equinox zur Verfü-
Load-time Weaving berücksichtigt wer-                      Konzepte dient ein stark vereinfachtes                     gung, mit der AspectJ Load-time Weaving
den sollen, aop.xml-„Standarddateien“                      Beispiel des Performance Loggings. Das                     auch unter den besonderen Rahmen-
[20]. Nur die Aspekte, die dort aufge-                     Bundle de.metafinanz.demo.aop.osgi                         bedingungen von OSGi bzw. Equinox
führt sind, werden berücksichtigt. Im                      enthält ein „Hello World“-Command                          funktioniert. So lassen sich die Vorteile
mitgelieferten Beispiel enthält die aop.                   für die OSGi-Konsole: Wenn „hello“ auf                     von aspektorientierter Programmierung,
xml-Datei nur einen Aspekt:                                der Konsole eingegeben wird, dann wird                     Load-time Weaving und OSGi hervorra-
                                                           „Hello World!“ ausgegeben. Das Bundle                      gend ergänzen, sodass eine durchgängige
                                                           de.metafinanz.demo.aop.osgi.aspect ent-                    Modularisierung erzielt werden kann.
<aspectj>
                                                           hält einen Aspekt, der die Ausführungs-                    So konnte in einem Großprojekt der Alli-
  <aspects>
   <aspect name=quot;de.metafinanz.demo.aop.osgi.console.      dauer dieses Kommandos misst und diese                     anz Deutschland AG der typische Cross-
                                    aspect.PerfHelloquot; />
                                                           ebenfalls auf der Konsole ausgibt.                         Cutting Concern Performance Logging
  </aspects>
                                                               Um die Beispielapplikation auszufüh-                   mithilfe von AspectJ Load-time Weaving
</aspectj>
                                                           ren, wird der OSGi-Launcher des Eclipse                    elegant realisiert werden.

Über die System Property org.aspectj.
weaver.loadtime.configuration wird
                                                                                                                                    Harald Griesbeck arbeitet bei der
                                                                         Heiko Seeberger leitet die Market
Equinox Aspects mitgeteilt, welche aop.                                                                                             Allianz Deutschland AG als Client-
                                                                         Unit Enterprise Architecture der
xml-Dateien herangezogen werden sol-                                                                                                Architekt im ABS-Projekt. Er ist seit
                                                                         metafinanz GmbH (www.metafinanz.
len. Als Standard hat sich hier org/as-                                                                                             über zehn Jahren im Java-Umfeld
                                                                         de). Er erstellt seit etwa zehn
pectj/aop.xml etabliert, aber natürlich                                                                                             tätig, mit Schwerpunkt Client-Fra-
                                                                         Jahren Enterprise Applications mit
                                                                                                                       meworks und Integration von Java-Client-Anwen-
sind beliebige andere Pfade möglich.                        Java, wobei sein aktueller Fokus auf Eclipse und
                                                                                                                       dungen in die Allianz-Anwendungslandschaft.
                                                            AspectJ liegt.
                                                                                                                       Kontakt: harald.griesbeck@allianz.de.
                                                            Kontakt: heiko.seeberger@metafinanz.de.
org.aspectj.weaver.loadtime.configuration=org/aspectj/
                                                aop.xml


                                                           >>Links & Literatur
Selbstverständlich gilt auch für Aspekt-
Bundles, dass nur exportierte Packages
                                                                                                                      	[13]		 ant.apache.org
                                                           	 [1]		 Handelsblatt	Nr.	220,	14.11.2006,	S.	28:	
für abhängige Bundles sichtbar sind. Das                           ALLIANZ:	Der	Versicherer	macht	sich	fit	           	[14]		 PDB-Bug:	https://bugs.eclipse.org/bugs/
bedeutet, dass sowohl die Packages, die                            für	die	Zukunft.                                           show_bug.cgi?id=147432/	
Aspekte enthalten, als auch die Packages,                  	 [2]		 sueddeutsche.de,	25.11.2007:	www.sued-             	[15]		 AspectJ-LTW:	www.eclipse.org/
welche die aop.xml-Dateien enthalten,                              deutsche.de/,ra3m1/wirtschaft/                             aspectj/doc/released/devguide/
exportiert werden müssen. Ansonsten                                artikel/850/144524/                                        ltw-configuration.html
findet entweder kein Weaving statt oder                    	 [3]		 www.eclipse.org/platform/                          	[16]		 Hookable	Adaptor:	wiki.eclipse.org/index.
das Weaving bricht mit Fehler ab. Im mit-                                                                                     php/Adaptor_Hooks/
                                                           	 [4]		 www.eclipse.org/equinox/
gelieferten Beispiel werden die folgenden                                                                             	[17]		 Equinox	Aspects:	www.eclipse.org/equin-
                                                           	 [5]		 de.wikipedia.org/wiki/
Packages exportiert:                                                                                                          ox/incubator/aspects/
                                                                   Cross-Cutting_Concern/
                                                                                                                      	 18]		 Equinox	Aspects	Update	Site:	download.
                                                                                                                      [
                                                           	 [6]		 en.wikipedia.org/wiki/
                                                                                                                              eclipse.org/tools/aspectj/dev/update/	
                                                                   Separation_of_Concerns/	
Export-Package: de.metafinanz.demo.aop.osgi.console.
                                                aspect,                                                               [19] Equinox	Aspects	Getting	Started:	www.
                                                           	 [7]		 de.wikipedia.org/wiki/
                                                                                                                           eclipse.org/equinox/incubator/aspects/
                                                                   Aspektorientierte_Programmierung/
 org.aspectj
                                                                                                                           getting_started.php	
                                                           	 [8]		 www.eclipse.org/aspectj/
                                                                                                                      [
                                                                                                                      	 20]		aop.xml:	www.eclipse.org/aspectj/doc/
Da die Aspekte von der AspectJ Runtime                      [9] www.eclipse.org/ajdt/
                                                                                                                             released/devguide/ltw-configuration.html
Library abhängig sind, entsteht beim                       	 10]		 de.wikipedia.org/wiki/
                                                           [
                                                                                                                      	[21]		 Peter	Friese,	Martin	Lippert,	
Weaving eine mittelbare Abhängigkeit                               Komponente_%28Software%29/
                                                                                                                              Heiko	Seeberger:	Security	does	
der zu aspektierenden Bundles von der                       [11] www.osgi.org
                                                                                                                              matter,	Eclipse	Magazin	Vol.	12
AspectJ Runtime Library. Daher ist es                      	[12]		 www.eclipse.org/pde/pde-build/




                                                                                                                                                                         25
www.eclipse-magazin.de                                                                                                                         eclipse magazin Vol. 15

Weitere ähnliche Inhalte

Ähnlich wie Eclipse Magazin15 - Performance Logging

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
Heiko Seeberger
 
Eclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matter
Heiko Seeberger
 
Prospect MENTIQ SÜSS MicroTec
Prospect MENTIQ SÜSS MicroTecProspect MENTIQ SÜSS MicroTec
Prospect MENTIQ SÜSS MicroTec
mcremerius
 
Zühlke Whitepaper Client Technologien
Zühlke Whitepaper Client TechnologienZühlke Whitepaper Client Technologien
Zühlke Whitepaper Client Technologien
Thomas Memmel
 
907049 Vr Leasing Cs A4 De
907049 Vr Leasing Cs A4 De907049 Vr Leasing Cs A4 De
907049 Vr Leasing Cs A4 De
Friedel Jonker
 
SOA-Integration mit Produkten der Software AG
SOA-Integration mit Produkten der Software AGSOA-Integration mit Produkten der Software AG
SOA-Integration mit Produkten der Software AG
Michael Groeschel
 
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
Heiko Seeberger
 
JM 02/09 - OSGi in kleinen Dosen 3
JM 02/09 - OSGi in kleinen Dosen 3JM 02/09 - OSGi in kleinen Dosen 3
JM 02/09 - OSGi in kleinen Dosen 3
Heiko Seeberger
 
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für HealthcareArtikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Peter Affolter
 
JM 04/09 - OSGi in kleinen Dosen 5
JM 04/09 - OSGi in kleinen Dosen 5JM 04/09 - OSGi in kleinen Dosen 5
JM 04/09 - OSGi in kleinen Dosen 5
Heiko Seeberger
 
Artikel Schweizer Bank: SOA als Grundlage für «Composite Applications"​
Artikel Schweizer Bank: SOA als Grundlage für «Composite Applications"​Artikel Schweizer Bank: SOA als Grundlage für «Composite Applications"​
Artikel Schweizer Bank: SOA als Grundlage für «Composite Applications"​
Peter Affolter
 
JM 03/09 - OSGi in kleinen Dosen 4
JM 03/09 - OSGi in kleinen Dosen 4JM 03/09 - OSGi in kleinen Dosen 4
JM 03/09 - OSGi in kleinen Dosen 4
Heiko Seeberger
 
Cloud Services von PC-studio
Cloud Services von PC-studioCloud Services von PC-studio
Cloud Services von PC-studio
pc_studio
 
Andreas Pleschek zu den Clients der Zukunft
Andreas Pleschek zu den Clients der ZukunftAndreas Pleschek zu den Clients der Zukunft
Andreas Pleschek zu den Clients der Zukunft
IBM Lotus
 
Webinar: Effiziente Digitalisierungsstrategien für den Mittelstand
Webinar: Effiziente Digitalisierungsstrategien für den Mittelstand  Webinar: Effiziente Digitalisierungsstrategien für den Mittelstand
Webinar: Effiziente Digitalisierungsstrategien für den Mittelstand
ELEKS
 
Ein Requirements Engineering Referenzmodell
Ein Requirements Engineering ReferenzmodellEin Requirements Engineering Referenzmodell
Ein Requirements Engineering Referenzmodell
Arnold Rudorfer
 
JM 12/08 - OSGi in kleinen Dosen 1
JM 12/08 - OSGi in kleinen Dosen 1JM 12/08 - OSGi in kleinen Dosen 1
JM 12/08 - OSGi in kleinen Dosen 1
Heiko Seeberger
 
DHI-WASY Aktuell 04/2011
DHI-WASY Aktuell 04/2011DHI-WASY Aktuell 04/2011
DHI-WASY Aktuell 04/2011
DHI-WASY GmbH
 

Ähnlich wie Eclipse Magazin15 - Performance Logging (20)

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 Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matter
 
Prospect MENTIQ SÜSS MicroTec
Prospect MENTIQ SÜSS MicroTecProspect MENTIQ SÜSS MicroTec
Prospect MENTIQ SÜSS MicroTec
 
Zühlke Whitepaper Client Technologien
Zühlke Whitepaper Client TechnologienZühlke Whitepaper Client Technologien
Zühlke Whitepaper Client Technologien
 
907049 Vr Leasing Cs A4 De
907049 Vr Leasing Cs A4 De907049 Vr Leasing Cs A4 De
907049 Vr Leasing Cs A4 De
 
Plattformvergleich
PlattformvergleichPlattformvergleich
Plattformvergleich
 
SOA-Integration mit Produkten der Software AG
SOA-Integration mit Produkten der Software AGSOA-Integration mit Produkten der Software AG
SOA-Integration mit Produkten der Software AG
 
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
 
JM 02/09 - OSGi in kleinen Dosen 3
JM 02/09 - OSGi in kleinen Dosen 3JM 02/09 - OSGi in kleinen Dosen 3
JM 02/09 - OSGi in kleinen Dosen 3
 
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für HealthcareArtikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
 
JM 04/09 - OSGi in kleinen Dosen 5
JM 04/09 - OSGi in kleinen Dosen 5JM 04/09 - OSGi in kleinen Dosen 5
JM 04/09 - OSGi in kleinen Dosen 5
 
Artikel Schweizer Bank: SOA als Grundlage für «Composite Applications"​
Artikel Schweizer Bank: SOA als Grundlage für «Composite Applications"​Artikel Schweizer Bank: SOA als Grundlage für «Composite Applications"​
Artikel Schweizer Bank: SOA als Grundlage für «Composite Applications"​
 
JM 03/09 - OSGi in kleinen Dosen 4
JM 03/09 - OSGi in kleinen Dosen 4JM 03/09 - OSGi in kleinen Dosen 4
JM 03/09 - OSGi in kleinen Dosen 4
 
Cloud Services von PC-studio
Cloud Services von PC-studioCloud Services von PC-studio
Cloud Services von PC-studio
 
Andreas Pleschek zu den Clients der Zukunft
Andreas Pleschek zu den Clients der ZukunftAndreas Pleschek zu den Clients der Zukunft
Andreas Pleschek zu den Clients der Zukunft
 
Webinar: Effiziente Digitalisierungsstrategien für den Mittelstand
Webinar: Effiziente Digitalisierungsstrategien für den Mittelstand  Webinar: Effiziente Digitalisierungsstrategien für den Mittelstand
Webinar: Effiziente Digitalisierungsstrategien für den Mittelstand
 
1&1 de
1&1 de1&1 de
1&1 de
 
Ein Requirements Engineering Referenzmodell
Ein Requirements Engineering ReferenzmodellEin Requirements Engineering Referenzmodell
Ein Requirements Engineering Referenzmodell
 
JM 12/08 - OSGi in kleinen Dosen 1
JM 12/08 - OSGi in kleinen Dosen 1JM 12/08 - OSGi in kleinen Dosen 1
JM 12/08 - OSGi in kleinen Dosen 1
 
DHI-WASY Aktuell 04/2011
DHI-WASY Aktuell 04/2011DHI-WASY Aktuell 04/2011
DHI-WASY Aktuell 04/2011
 

Mehr von Heiko Seeberger

Scaladays 2011 - The Ease of Scalaz
Scaladays 2011 - The Ease of ScalazScaladays 2011 - The Ease of Scalaz
Scaladays 2011 - The Ease of Scalaz
Heiko 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
 
W-JAX 09 - ScalaModules
W-JAX 09 - ScalaModulesW-JAX 09 - ScalaModules
W-JAX 09 - ScalaModules
Heiko Seeberger
 
W-JAX 09 - Lift
W-JAX 09 - LiftW-JAX 09 - Lift
W-JAX 09 - Lift
Heiko Seeberger
 
JM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala ReviewJM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala Review
Heiko Seeberger
 
JM 08/09 - ScalaModules
JM 08/09 - ScalaModulesJM 08/09 - ScalaModules
JM 08/09 - ScalaModules
Heiko 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 Scala
Heiko Seeberger
 
JAX 09 - OSGi on Scala
JAX 09 - OSGi on ScalaJAX 09 - OSGi on Scala
JAX 09 - OSGi on Scala
Heiko Seeberger
 
JAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components ModelsJAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components Models
Heiko Seeberger
 
JAX 08 - Agile RCP
JAX 08 - Agile RCPJAX 08 - Agile RCP
JAX 08 - Agile RCP
Heiko Seeberger
 
Eclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by ContractEclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by Contract
Heiko Seeberger
 
EclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCPEclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCP
Heiko Seeberger
 
W-JAX 07 - AOP im Einsatz mit OSGi und RCP
W-JAX 07 - AOP im Einsatz mit OSGi und RCPW-JAX 07 - AOP im Einsatz mit OSGi und RCP
W-JAX 07 - AOP im Einsatz mit OSGi und RCP
Heiko Seeberger
 
W-JAX 08 - Declarative Services versus Spring Dynamic Modules
W-JAX 08 - Declarative Services versus Spring Dynamic ModulesW-JAX 08 - Declarative Services versus Spring Dynamic Modules
W-JAX 08 - Declarative Services versus Spring Dynamic Modules
Heiko Seeberger
 

Mehr von 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
 
JUGM 07 - AspectJ
JUGM 07 - AspectJJUGM 07 - AspectJ
JUGM 07 - AspectJ
 
EclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCPEclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCP
 
W-JAX 07 - AOP im Einsatz mit OSGi und RCP
W-JAX 07 - AOP im Einsatz mit OSGi und RCPW-JAX 07 - AOP im Einsatz mit OSGi und RCP
W-JAX 07 - AOP im Einsatz mit OSGi und RCP
 
W-JAX 08 - Declarative Services versus Spring Dynamic Modules
W-JAX 08 - Declarative Services versus Spring Dynamic ModulesW-JAX 08 - Declarative Services versus Spring Dynamic Modules
W-JAX 08 - Declarative Services versus Spring Dynamic Modules
 

Eclipse Magazin15 - Performance Logging

  • 1. Architektur AspectJ und Equinox Performance Logging mit AspectJ und der Eclipse-Plug-in-Architektur Säuberlich getrennt >> heiko seeberger und harald griesbeck bedingungen, z.B. für den Build-Prozess Performance-Kennzahlen einer Software durch Logging im produktiven und den Einsatz von AspectJ, worauf wir noch detailliert eingehen werden. Betrieb zu ermitteln, ist geradezu eine Paradedisziplin für aspekt- Eine wichtige Forderung an die ABS- orientierte Programmierung. Die Theorie ist simpel, in der Praxis sieht Anwendung ist die Einhaltung der in Form von Service Level Agreements zugesicher- es etwas anders aus. In einer umfassenden Geschäftsanwendung ten Antwortzeiten. Schließlich sind für ei- kommen AspectJ und die Eclipse-Plug-in-Architektur bei der Lösung ne unternehmenskritische Anwendung die Verfügbarkeit und Performance noch vor dieses Cross-Cutting Concerns zum Einsatz. der Funktionalität die wichtigsten Anfor- derungen, so Dr. Ralf Schneider, CIO der Allianz Deutschland AG. Zur Sicherstel- D lung der Performance ist ein verlässliches Geschäftslogik und zukünftig auch das ie Allianz Deutschland AG führt der- Reporting der Performance-Kennzahlen User Interface auf der Programmierspra- zeit in einem strategischen Großpro- im produktiven Betrieb erforderlich, um che Java und der Eclipse-Plattform [3] jekt ein neues Softwaresystem für alle Be- beispielsweise die Frage „Wie lange muss basieren. Die Komponentenarchitektur lange des Versicherungs-Kerngeschäfts ein Sachbearbeiter warten, bis das Er- und Erweiterungsmöglichkeiten von ein [1], [2]. Die neue Software, das Allianz gebnis der Personensuche, sortiert nach Equinox [4] (ehemals Eclipse Runtime Business System (ABS), stellt den Kunden Name und Postleitzahl, angezeigt wird?“ Core) stellen wesentliche Merkmale der in den Mittelpunkt und ermöglicht dem beantworten zu können. Anders als beim ABS-Architektur dar und erfüllen die für Sachbearbeiter eine umfassende Bearbei- Profiling während der Entwicklungspha- ein strategisches Anwendungssystem tung der Kundenanliegen, die sich durch se geht es hierbei um die kontinuierliche wichtigen Anforderungen an Modula- die täglichen Telefonate, den Brief- und Performance-Ermittlung „in Produkti- rität, Flexibilität und Erweiterbarkeit. E-Mail-Verkehr ergeben. Die ABS-An- on“ mit dem Ziel, rasch Gegenmaßnah- Gleichzeitig definiert die Verwendung der wendung beruht auf einer modernen, men einleiten zu können, wenn eine signi- Eclipse-Plattform verschiedene Rahmen- mehrschichtigen Architektur, bei der die 20 eclipse magazin Vol. 15 www.eclipse-magazin.de
  • 2. Architektur AspectJ und Equinox gang nennt man Weaving. AspectJ bietet fikante Verschlechterung der Performance komplexe Problemstellungen leichter zum einen die Möglichkeit, das Weaving erkannt wird. In der ABS-Anwendung lösen lassen, wenn sie in überschaubare beim Kompilieren durchzuführen (Com- werden hierfür im Prinzip Start- und End- und disjunkte „Häppchen“ zerlegt sind. pile-time Weaving), zum anderen erlaubt Zeitpunkte von definierten Messstrecken Software sollte somit aus Modulen be- AspectJ, das Weaving zur Laufzeit – ge- in Logfiles ausgegeben, zentral gesammelt stehen, die möglichst wenig überlappen- nauer gesagt, beim Laden der betroffenen und dann ausgewertet. de Funktionalität aufweisen. Java bietet Klassen durch die Java Virtual Machine – Dieses Performance Logging ist ein als objektorientierte Sprache bereits durchzuführen (Load-time Weaving). Bei- typischer Cross-Cutting Concern [5], hat strukturelle Konzepte zur Modularisie- de Varianten ermöglichen das Einweben also nichts mit der grundlegenden bzw. rung, z.B. Packages, Klassen, Methoden von Aspekten in fremden Libraries. Im primären Funktionalität zu tun, wie etwa etc. Mit dieser Strukturierung werden konkreten ABS-Projekt besteht die Not- der Suche von Personen anhand von Na- die Primary Concerns abgebildet, z.B. wendigkeit, Performance-Messpunkte me und Postleitzahl. Vielmehr durchsetzt eine Klasse Person mit den Properties im sogenannten ABS-Kern, der als fertige der Code zum Ausgeben der Messpunkte Vor- und Nachname. In der Praxis gibt Plattform zur Verfügung steht, einzubau- vielerorts den primären Code. Diese Ver- es jedoch so gut wie immer Belange, die en. Mithilfe der Weaving-Technik kann mischung verschiedener Belange verletzt sich mithilfe der objektorientierten Pro- diese Anforderung elegant gelöst werden. das bewährte Prinzip der Separation of grammierung nicht modularisieren las- Concerns [6] und es entsteht dadurch sen. Typische Beispiele für Cross-Cutting Modularisierung par excellence unverständlicher und schlecht wartbarer Concerns sind Querschnittsfunktionen Programm-Code. Die aspektorientierte wie Logging, Tracing, Security usw., also Das bereits erwähnte Prinzip der Se- Programmierung [7] adressiert dieses Prob- nichtfunktionale Anforderungen. Mit paration of Concerns besagt, dass sich lem und bietet die Möglichkeit, auch die Cross-Cutting Concerns zu modularisie- ren, wodurch wiederum eine verbesserte Softwarequalität erreicht wird. Da die ABS-Anwendung mit der Programmier- sprache Java und mit der Entwicklungs- umgebung Eclipse SDK entwickelt wird, bietet sich die Verwendung von AspectJ [8] an. AspectJ stellt den Quasi-Standard für Aspektorientierung mit Java dar und verfügt mit AJDT [9] über eine hervorra- gende Integration in das Eclipse SDK. As- pectJ ergänzt die objektorientierte Spra- Anzeige che Java um aspektorientierte Konzepte. Dabei werden die so genannten Primary Concerns, d.h., die grundlegenden An- forderungen an ein Software-System, mit objektorientierten Mitteln entwickelt, z.B. mit Java-Konstrukten wie Packages, Klassen, Methoden etc. Die Cross-Cutting Concerns werden dann mit den erweiter- ten Sprachmitteln von AspectJ, z.B. mit As- pekten, Advices und Pointcuts, umgesetzt. Für Details sei auf die Dokumentation auf der AspectJ-Website verwiesen. Ein weiterer und entscheidender Punkt, der im konkreten Fall zum Einsatz von aspektorientierter Programmierung führte, ist die Fähigkeit von AspectJ, nicht nur auf Quellcode-Ebene arbeiten zu kön- nen, sondern auch mit vorhandenen Lib- raries. Das bedeutet, dass auch in vorkom- piliertem Code Aspekte eingebaut werden können. Die getrennten Belange, also der primäre Code und die Cross-Cutting Con- cerns, werden in der aspektorientierten Programmierung getrennt erstellt und müssen in einem späteren Schritt wieder zusammengeführt werden. Diesen Vor- 21 www.eclipse-magazin.de eclipse magazin Vol. 15
  • 3. Architektur AspectJ und Equinox den Cross-Cutting Concerns durch As- gab es Bedenken hinsichtlich der Ver- pekte modularisiert und diese wiederum wendung des Patches. Diese wurden in in Aspekt-Bundles. einem Smoke-Test bestätigt: einerseits Die separierten Belange müssen durch Warnmeldungen, die ohne Patch letztendlich wieder zusammengeführt nicht auftraten, andererseits durch Ab- Abb. 1: Cross-Cutting Concerns werden. Dieser Vorgang wird, wie be- brüche beim Kompilieren von reinen werden in Aspekten modularisiert reits erwähnt, als Weaving bezeichnet. Ressource-Plug-ins, d.h. Plug-ins ohne Bei AspectJ gibt es dafür zwei Methoden: Klassen. Letztendlich erschien dadurch Compile-time Weaving und Load-time der Einsatz von AspectJ Compile-time Weaving. Beim Compile-time Weaving Weaving als zu riskant und die hohen werden Klassen und Aspekte bereits Abhängigkeiten der einzelnen Versions- durch den AspectJ Compiler während stände als zu unflexibel, sodass Compile- Abb. 2: Marker zeigen die Stellen, an denen Aspekte verwoben werden des Build-Prozesses zusammengeführt time Weaving für die ABS-Anwendung und der vollständige Byte-Code erzeugt. nicht zum Einsatz kommt. Somit ist der AOP-Ansatz für die Lauf- Bei Load-time Weaving findet die zeitumgebung völlig transparent. Ein Zusammenführung von Klassen und weiterer Vorteil von AspectJ Compile- Aspekten erst zur Laufzeit – genauer ge- time Weaving ist die gute Unterstützung sagt beim Classloading – statt. Dazu ist Abb. 3: Weaving erzeugt eine Abhängigkeit zum in der Entwicklungsumgebung durch die es nötig, das Classloading entsprechend Aspekt AJDT Plug-ins. So werden zum Beispiel zu modifizieren. AspectJ bietet dafür eine durch Marker diejenigen Stellen hervor- Unterstützung in Form von JVM Agents gehoben, an denen Aspekte verwoben oder speziellen ClassLoaders [15] an. aspektorientierter Programmierung las- werden (Abb. 2). Auch das Debugging Load-time Weaving bietet den Vorteil, sen sich auch diese Cross-Cutting Con- funktioniert völlig transparent. die Auswahl der Klassen, die mit Aspek- cerns modularisieren, sodass Klassen ten verwoben werden, nicht von Anfang und Aspekte bzw. deren Methoden und In der Praxis zu riskant an zu begrenzen. Während beim Com- Advices keine überlappenden Belange pile-time Weaving nur die beim Build- mehr enthalten (Abb. 1). Allerdings verlässt Compile-time Wea- Prozess vorliegenden Klassen verwoben Neben dieser Form von Modularisie- ving die Modularisierung bereits beim werden, können später hinzukommen- rung auf „Mikroebene“ dient das Kon- Build-Prozess. Der oben aufgeführte de nicht mehr berücksichtigt werden. zept von Komponenten [10] ebenfalls zur Vorteil der Kombination von AspectJ Für Security-Aspekte kann dies ein sehr Separation of Concerns, jedoch auf grö- mit den dynamischen Eigenschaften von wichtiges Kriterium sein, z.B. wenn vor berer Ebene. Equinox implementiert mit OSGi geht dadurch verloren. Abgesehen jeglicher Ausführung einer execute()- OSGi [11] eine dynamische Komponen- von diesen prinzipiellen Gesichtspunk- Methode eines IAction-Interfaces zuvor tenarchitektur, welche die Zusammen- ten spielt natürlich die Praxistauglichkeit die Authentifizierung und Autorisierung führung bzw. Installation von Kompo- eine entscheidende Rolle. Umfangreiche überprüft werden sollen. nenten (Bundles im OSGi-Jargon) zum Anwendungen werden in der Regel nicht Der große Vorteil von Load-time spätestmöglichen Zeitpunkt erlaubt, auf einem Entwicklerrechner „gebaut“, Weaving ist der Erhalt der Modulari- nämlich zur Laufzeit. Somit lassen sich sondern es kommt ein zentraler Build- sierung über den Build-Prozess hinweg Bundles von zusammengehörigen Klas- Prozess zum Einsatz. Eclipse stellt hierfür bis zum Zeitpunkt der Ausführung. sen oder Aspekten bilden, z.B. ein Bundle den PDE Build [12] zur Verfügung, der Die Builds von Primary Concerns und Person für die Fachlichkeit rund um das auf Apache Ant [13] basiert. Dieser kann Querschnittsfunktionen können sepa- Domain Object Person und ein Bundle zum heutigen Stand (Eclipse 3.3.1) nicht rat erfolgen. Natürlich müssen die As- Security mit Aspekten für Authentifizie- konfiguriert werden, um einen anderen pekte, auch wenn das Weaving erst beim rung und Autorisierung. Diese Bundles Compiler als den Standard-Compiler zu Classloading erfolgt, übersetzt werden. sind in sich selbst konsistent und können verwenden [14]. Daher liefert AJDT ei- Allerdings reicht es nun aus, nur dieje- unter Berücksichtigung ihrer Abhängig- nen Patch für den PDE Build: Die Datei nigen Bundles, die Aspekte enthalten, keiten isoliert entwickelt und getestet pdebuild.jar im Plug-in org.eclipse.pde. mit dem AspectJ Compiler zu überset- werden. Wenn die Abhängigkeiten, die build muss durch eine modifizierte Datei zen. Dafür kann entweder ein separater jedes Bundle explizit deklarieren muss, ersetzt werden. Dadurch werden in der PDE Build mit Patch aufgesetzt werden minimal gehalten und geschickt entwor- Folge alle Plug-ins nicht mehr mit dem oder es wird einfach der Export aus der fen werden, z.B. in Form von Interfaces, originalen PDE Compiler übersetzt, son- Entwicklungsumgebung verwendet. In dann ergibt sich automatisch ein hoher dern mit dem AspectJ Compiler. Bei die- beiden Fällen kann der ursprüngliche Grad an Separierung. In großen Projek- sem Vorgehen ist schon alleine aufgrund PDE Build für alle primären Bundles ten hat man hierdurch die Möglichkeit, möglicher Versions-Inkompatibilitäten unverändert bleiben. Im konkreten Fall die separierten Teile in unterschiedlichen allerhöchste Vorsicht geboten. Der ge- der ABS-Anwendung wird als pragmati- Teams entwickeln zu lassen. Wie man nannte Patch wird von AJDT erst seit sche Zwischenlösung der Export aus der sieht, ergänzen sich OSGi und AspectJ Version 1.4.1 geliefert, die kompatibel Entwicklungsumgebung verwendet, da hervorragend, um eine durchgehende zu Eclipse 3.2.1 ist. Da die ABS-Anwen- AspectJ derzeit nur für das Performance Modularisierung zu erzielen. Dabei wer- dung auf Eclipse 3.2.0 entwickelt wird, 22 eclipse magazin Vol. 15 www.eclipse-magazin.de
  • 4. Architektur AspectJ und Equinox det werden, sondern das Load-time Wea- Darüber hinaus besteht Equinox As- ving muss in das Equinox Classloading pects aus dem obligatorischen Bundle integriert werden. org.aspectj.osgi.service.weaving, das Weiter müssen Bundles unter OSGi den Weaving Service anbietet. Für die J9- ihre Abhängigkeiten explizit deklarie- JVM von IBM stellt das optionale Bundle ren. Zur Entwicklungszeit geschieht org.aspectj.osgi.service.caching.j9 einen dies durch Einträge im so genannten Caching-Mechanismus zur Verfügung, Bundle-Manifest. Zur Laufzeit sind für wobei die Realisierung eines allgemeinen Abb. 4: Eclipse-SupplementBundle ein Bundle dann nur diejenigen Abhän- Caching Services für beliebige JVMs eine erzeugt zur Laufzeit die nötigen Abhängigkeiten gigkeiten sichtbar, die explizit importiert noch offene Aufgabe der Community ist. werden. Wenn eine Klasse mit einem As- Installieren und Konfigurieren von pekt verwoben wird, entsteht dabei eine Equinox Aspects neue Abhängigkeit von der verwobenen Klasse zum Aspekt (Abb. 3). Equinox Aspects kann entweder aus dem Zur Entwicklungszeit sind diese Eclipse SDK über eine Update Site [18] Abhängigkeiten natürlich noch nicht installiert oder als ZIP-Archiv von der vorhanden, denn schließlich werden „Getting Started“-Seite [19] herunterge- die Cross-Cutting Concerns durch die laden werden. Da es sich hierbei um reine Abb. 5: Beispiel in Aktion: Der Aspekt gibt die Aus- aspektorientierte Programmierung Runtime Plug-ins ohne Tooling oder an- führungsdauer aus separiert, d.h. der „eigentliche“ Code dere Integration in das SDK handelt, ist kennt die Aspekte gar nicht. Die Bundles es empfehlenswert, sie nicht in das SDK können somit diese Abhängigkeiten, die zu installieren, sondern die Plug-ins in durch das Load-time Weaving entstehen, die jeweilige Target Platform aufzuneh- nicht a priori im Bundle-Manifest de- men. Auf alle Fälle muss berücksichtigt klarieren. Daher harmoniert Load-time werden, dass Equinox Aspects wie jedes Weaving nicht out-of-the-box mit OSGi, Framework Extension Fragment un- sondern bedarf besonderer Unterstüt- bedingt im selben Verzeichnis wie das zung: Die neuen Abhängigkeiten müssen System Bundle org.eclipse.osgi abgelegt den Bundles beim Laden dynamisch hin- werden muss, da die Framework Exten- zugefügt werden. sion sonst nicht gefunden und infolge- Equinox bietet seit Version 3.2 mit dessen ignoriert wird. Abb. 6: Launcher für das Beispiel: dem so genannten Hookable Adaptor Damit die Bundles, auf denen die Bundles und Start-Level [16] eine sehr flexible Implementierung Aspekte eines Aspekt-Bundles wirken von OSGi, die es ermöglicht, zahlreiche sollen, zur Laufzeit mit den nötigen Ab- Funktionalitäten des Frameworks an- hängigkeiten versehen werden können, Logging verwendet wird und nur ein zupassen oder zu erweitern. Über einen führt Equinox Aspects neue Manifest- Bundle mit Aspekten existiert. HookConfigurator können verschiede- Header ein, die in den Aspekt-Bundles AspectJ Load-time ne Hooks mit unterschiedlichen Funk- verwendet werden: Weaving unter Equinox tionalitäten registriert werden, die vom Hookable Adaptor während der Aus- • Eclipse-SupplementBundle Viele der herausragenden Eigenschaf- führung der jeweiligen Funktionalität • Eclipse-SupplementImporter ten, die OSGi bietet, werden in Equinox aufgerufen werden. Diese Klassen und • Eclipse-SupplementExporter durch eine ausgefeilte Classloading-Stra- Ressourcen werden in einem so genann- tegie umgesetzt. Daher kann für AspectJ ten Framework Extension Fragment ge- Den unter Eclipse-SupplementBundle Load-time Weaving unter Equinox nicht bündelt, dessen Host Bundle das System aufgeführten Bundles wird beim Laden die oben erwähnte Standardunterstüt- Bundle org.eclipse.osgi ist. dynamisch die Abhängigkeit vom As- zung in Form von JVM Agents verwen- Im Eclipse-Projekt Equinox Aspects pekt-Bundle hinzugefügt. Analog dazu [17] sind nun verschiedene Hooks reali- werden bei Eclipse-SupplementImpor- Checkliste für siert, insbesondere ein BundleFileWrap- ter und Eclipse-SupplementExporter Aspekt-Bundles perFactoryHook und ein ClassLoading- importierte bzw. exportierte Packages Hook, um AspectJ Load-time Weaving hinzugefügt. Im mitgelieferten Beispiel Die folgenden Punkte müssen umgesetzt wer- den, damit Aspekt-Bundles „funktionieren“: für Equinox zu ermöglichen. Das ver- findet man im Bundle-Manifest des As- wendete Framework Extension Frag- pekt-Bundles de.metafinanz.demo.aop. • Einfügen der Supplement Header für zu ment heißt org.aspectj.osgi, und über die osgi.aspect den folgenden Eintrag: aspektierende Bundles/Packages System Property osgi.framework.exten- • Exportieren der Packages mit Aspekten sions wird es dem Hookabel Adaptor be- Eclipse-SupplementBundle: de.metafinanz.demo.aop.osgi • Exportieren des Packages mit aop.xml kannt gegeben: (in der Regel org.aspectj) Dadurch wird das Bundle de.metafinanz. • Reexportieren der AspectJ Library demo.aop.osgi zur Laufzeit mit einer osgi.framework.extensions=org.aspectj.osgi 24 eclipse magazin Vol. 15 www.eclipse-magazin.de
  • 5. Architektur AspectJ und Equinox Abhängigkeit auf das Aspekt-Bundle wichtig, dass die Aspekt-Bundles diese SDKs verwendet. Die oben aufgeführten Abhängigkeit reexportieren: System Properties werden im Reiter Ar- de.metafinanz.demo.aop.osgi.aspect versehen (Abb. 4). guments gesetzt und die zu verwenden- Für die Angabe der Bundles können den Bundles werden im Reiter Bundles Require-Bundle: org.aspectj.runtime;visibility:=reexport auch Wildcards verwendet werden, z.B. konfiguriert. Dabei ist es wichtig, den Weaving Service (org.aspectj.osgi.service. Eine Zusammenfassung der wichtigsten weaving) zu starten, bevor zu aspektieren- Konfigurationseinstellungen für die Ver- Eclipse-SupplementBundle: de.metafinanz.*, org.eclipse.* de Bundles geladen werden, z.B. indem ein wendung von Equinox Aspects befindet geeigneter Start-Level gesetzt wird. Alle Bundles, die mit de.metafinanz oder sich im Kasten „Checkliste für Aspekt- org.eclipse beginnen, erhalten in diesem Bundles“. Fazit Fall eine Abhängigkeit auf das Aspekt- Beispiel Bundle. Equinox Aspects verwendet zur Mit Equinox Aspects steht eine Frame- Identifizierung der Aspekte, die beim Zur Verdeutlichung der vorgestellten work Extension für Equinox zur Verfü- Load-time Weaving berücksichtigt wer- Konzepte dient ein stark vereinfachtes gung, mit der AspectJ Load-time Weaving den sollen, aop.xml-„Standarddateien“ Beispiel des Performance Loggings. Das auch unter den besonderen Rahmen- [20]. Nur die Aspekte, die dort aufge- Bundle de.metafinanz.demo.aop.osgi bedingungen von OSGi bzw. Equinox führt sind, werden berücksichtigt. Im enthält ein „Hello World“-Command funktioniert. So lassen sich die Vorteile mitgelieferten Beispiel enthält die aop. für die OSGi-Konsole: Wenn „hello“ auf von aspektorientierter Programmierung, xml-Datei nur einen Aspekt: der Konsole eingegeben wird, dann wird Load-time Weaving und OSGi hervorra- „Hello World!“ ausgegeben. Das Bundle gend ergänzen, sodass eine durchgängige de.metafinanz.demo.aop.osgi.aspect ent- Modularisierung erzielt werden kann. <aspectj> hält einen Aspekt, der die Ausführungs- So konnte in einem Großprojekt der Alli- <aspects> <aspect name=quot;de.metafinanz.demo.aop.osgi.console. dauer dieses Kommandos misst und diese anz Deutschland AG der typische Cross- aspect.PerfHelloquot; /> ebenfalls auf der Konsole ausgibt. Cutting Concern Performance Logging </aspects> Um die Beispielapplikation auszufüh- mithilfe von AspectJ Load-time Weaving </aspectj> ren, wird der OSGi-Launcher des Eclipse elegant realisiert werden. Über die System Property org.aspectj. weaver.loadtime.configuration wird Harald Griesbeck arbeitet bei der Heiko Seeberger leitet die Market Equinox Aspects mitgeteilt, welche aop. Allianz Deutschland AG als Client- Unit Enterprise Architecture der xml-Dateien herangezogen werden sol- Architekt im ABS-Projekt. Er ist seit metafinanz GmbH (www.metafinanz. len. Als Standard hat sich hier org/as- über zehn Jahren im Java-Umfeld de). Er erstellt seit etwa zehn pectj/aop.xml etabliert, aber natürlich tätig, mit Schwerpunkt Client-Fra- Jahren Enterprise Applications mit meworks und Integration von Java-Client-Anwen- sind beliebige andere Pfade möglich. Java, wobei sein aktueller Fokus auf Eclipse und dungen in die Allianz-Anwendungslandschaft. AspectJ liegt. Kontakt: harald.griesbeck@allianz.de. Kontakt: heiko.seeberger@metafinanz.de. org.aspectj.weaver.loadtime.configuration=org/aspectj/ aop.xml >>Links & Literatur Selbstverständlich gilt auch für Aspekt- Bundles, dass nur exportierte Packages [13] ant.apache.org [1] Handelsblatt Nr. 220, 14.11.2006, S. 28: für abhängige Bundles sichtbar sind. Das ALLIANZ: Der Versicherer macht sich fit [14] PDB-Bug: https://bugs.eclipse.org/bugs/ bedeutet, dass sowohl die Packages, die für die Zukunft. show_bug.cgi?id=147432/ Aspekte enthalten, als auch die Packages, [2] sueddeutsche.de, 25.11.2007: www.sued- [15] AspectJ-LTW: www.eclipse.org/ welche die aop.xml-Dateien enthalten, deutsche.de/,ra3m1/wirtschaft/ aspectj/doc/released/devguide/ exportiert werden müssen. Ansonsten artikel/850/144524/ ltw-configuration.html findet entweder kein Weaving statt oder [3] www.eclipse.org/platform/ [16] Hookable Adaptor: wiki.eclipse.org/index. das Weaving bricht mit Fehler ab. Im mit- php/Adaptor_Hooks/ [4] www.eclipse.org/equinox/ gelieferten Beispiel werden die folgenden [17] Equinox Aspects: www.eclipse.org/equin- [5] de.wikipedia.org/wiki/ Packages exportiert: ox/incubator/aspects/ Cross-Cutting_Concern/ 18] Equinox Aspects Update Site: download. [ [6] en.wikipedia.org/wiki/ eclipse.org/tools/aspectj/dev/update/ Separation_of_Concerns/ Export-Package: de.metafinanz.demo.aop.osgi.console. aspect, [19] Equinox Aspects Getting Started: www. [7] de.wikipedia.org/wiki/ eclipse.org/equinox/incubator/aspects/ Aspektorientierte_Programmierung/ org.aspectj getting_started.php [8] www.eclipse.org/aspectj/ [ 20] aop.xml: www.eclipse.org/aspectj/doc/ Da die Aspekte von der AspectJ Runtime [9] www.eclipse.org/ajdt/ released/devguide/ltw-configuration.html Library abhängig sind, entsteht beim 10] de.wikipedia.org/wiki/ [ [21] Peter Friese, Martin Lippert, Weaving eine mittelbare Abhängigkeit Komponente_%28Software%29/ Heiko Seeberger: Security does der zu aspektierenden Bundles von der [11] www.osgi.org matter, Eclipse Magazin Vol. 12 AspectJ Runtime Library. Daher ist es [12] www.eclipse.org/pde/pde-build/ 25 www.eclipse-magazin.de eclipse magazin Vol. 15