Aspektorientierte Programmierung (AOP) ist ein Ansatz, Funktionalitäten zu kapseln, die an vielen Stellen einer Anwendung auftreten. Für die Programmierung dieser sogenannten Crosscutting Concerns sind mehrere Implementierungen auf den Markt gekommen, welche sehr unterschiedliche Ansätze verfolgen. Bis jetzt wird AOP jedoch in realen Projekten noch nicht sehr häug eingesetzt. Diese Masterarbeit verfolgt das Ziel, ein Framework zu entwickeln, um AOP für die Messpunktsetzung in bereits laufenden Anwendungen zu verwenden. Um eine Aussage treffen zu können, ob AOP dafür eingesetzt werden kann, sind folgende Punkte zu klären:
1. Ist AOP ein guter Ansatz, mit dem existierende Anwendungen mit geringem Aufwand instrumentiert werden können?
2. Welche der existierenden AOP-Ansätze ist am besten für diesen Zweck geeignet?
Unter dem Namen PerfLoad ist ein Lasttest-Framework entworfen und implementiert worden, welches man einfach, flexibel und zentral konfigurieren kann. Es bietet eine Managementkonsole, mit der die Lasttests gestartet, verwaltet und die Ergebnisse ausgewertet werden können. Für die Messpunktsetzung verwendet PerfLoad AOP. Es wurde damit untersucht, welcher der AOP-Ansätze am Besten geeignet ist, um Anwendungen gezielt instrumentieren zu können.
Inhaltsverzeichnis
1 Einleitung
1.1 Der Lebenszyklus einer Anwendung
1.2 Ziel dieser Arbeit
2 Übersicht
2.1 Profiling-Methoden
2.2 Aspektorientierte Programmierung
2.3 Framework PerfLoad
2.4 PerfLoad und AOP
3 Profiling-Methoden
3.1 Übersicht existierender Systeme
3.2 JMX
3.3 JVM Interfaces
3.4 Bytecode Modifikation
4 Aspektorientierte Programmierung
4.1 AspectJ
4.2 AspectWerkz
4.3 JBossAOP
4.4 Weitere Ansätze
4.5 Zusammenfassung
5 Das Lasttest-Framework PerfLoad
5.1 Vorhandene Lasttest-Frameworks
5.2 Grundstruktur von PerfLoad
5.3 Komponenten von PerfLoad
5.4 Testerstellung
5.5 Auswertung der Testergebnisse
6 AOP für Profiling
6.1 Zusammenarbeit der Aspekte mit PerfLoad
6.2 Kollektor-Prozess
6.3 Managementkonsole
6.4 EJB-Aspekt
6.5 Web-Aspekt
7 Performancevergleich
7.1 Manuelle Codierung vs. AspectJ
7.2 AspectJ vs. AspectWerkz
7.3 Zusammenfassung
8 Konfiguration
8.1 AspectJ
8.2 AspectWerkz Offline
8.3 AspectWerkz Online
8.4 Zusammenfassung
9 Fazit
A Übersicht weiterer Profiler
B AspectJ Kurzreferenz
B.1 Aspekte
B.2 Pointcut Definitionen
B.3 Advice Deklaration
B.4 Spezielle Datentypen innerhalb von Advices
B.5 Primitive Pointcuts
C AspectWerkz Kurzreferenz
C.1 Join Point Auswahlsprache
C.2 Deployment models
C.3 Advice Deklaration
C.4 Pointcut Definition
D CD Inhalt
E Quellcode
F Verwendete Anwendungen
G Verwendete Bibliotheken
Zielsetzung und Themen
Die Masterarbeit zielt darauf ab, ein Framework für Lasttests zu entwickeln, das J2EE-Systeme mit minimalem Overhead und hoher Flexibilität instrumentiert, um Performancedaten in laufenden Anwendungen zu erfassen. Die Forschungsfrage konzentriert sich darauf, wie Aspektorientierte Programmierung (AOP) effektiv zur Messpunktsetzung genutzt werden kann, ohne bestehenden Quellcode manuell zu verändern.
- Entwicklung und Implementierung des Lasttest-Frameworks "PerfLoad".
- Analyse und Vergleich bestehender Profiling-Methoden wie JMX, JVMPI und Bytecode-Modifikation.
- Untersuchung von AOP-Implementierungen (insb. AspectJ und AspectWerkz) für den Einsatz in Lastszenarien.
- Konzeption einer zentralen Verwaltung und flexiblen Konfiguration für verteilte Test-Clients.
- Evaluation der Performance-Auswirkungen durch den Einsatz von Aspekten im Vergleich zu manueller Instrumentierung.
Auszug aus dem Buch
1.1 Der Lebenszyklus einer Anwendung
Im Lebenszyklus einer Anwendung gibt es viele Personen, die für die Leistung des Systems verantwortlich sind: Software-Architekten, Entwickler, die Qualitätssicherung und ein Admin-Team, welches die Anwendung in der Produktion betreut. Sie alle haben Anforderungen an eine Leistungsanalyse, aber durch die verschiedenen Umgebungen, in denen sie arbeiten, sehr unterschiedliche Möglichkeiten, das System zu beeinflussen:
In der Designphase sind Skalierbarkeit und Performance wichtige Kriterien, die oftmals über den Erfolg eines Projekts entscheiden. Dieser Bereich wird in dieser Arbeit nicht weiter beleuchtet, da in dieser Phase keine Testtools verwendet werden. Interessierte können in [2], [3] oder [4] Informationen zu diesem Thema erhalten.
In der Entwicklungsphase können Testprogramme sehr sinnvoll eingesetzt werden, um Performance und Funktionalität zu testen. Entwickler sollten in diesem Zeitraum die einzelnen Komponenten nach Kriterien wie Latenz und Ressourcennutzung untersuchen.
In der Qualitätssicherungsphase werden typischerweise Funktionstests des gesamten Systems und anschließend Lasttests durchgeführt. Die vollständige Anwendung sollte mit allen Schnittstellen zu externen Systemen vor dem Release der Software einem Lasttest unterzogen werden. Besonderes Augenmerk muss vor allem darauf gelegt werden, dass die zu erwartende Last auch in der zu erwartenden Umgebung erzeugt wird. Dabei sollten die einzelnen J2EE™ Schichten bis hinunter zu den einzelnen Methoden untersucht werden.
Zusammenfassung der Kapitel
1 Einleitung: Beschreibt den Lebenszyklus einer Anwendung und die Notwendigkeit von Lasttests, um Performance-Probleme in J2EE-Umgebungen frühzeitig zu erkennen.
2 Übersicht: Gibt einen Überblick über die Konzepte des Frameworks PerfLoad und die Relevanz von Profiling-Methoden sowie AOP für Messungen.
3 Profiling-Methoden: Analysiert verschiedene technische Ansätze zur Gewinnung von Leistungsdaten, darunter JMX, JVMPI und Techniken der Bytecode-Modifikation.
4 Aspektorientierte Programmierung: Erläutert die Grundlagen von AOP und bewertet die Implementierungen AspectJ, AspectWerkz und JBossAOP für den produktiven Einsatz.
5 Das Lasttest-Framework PerfLoad: Beschreibt den Entwurf und die Architektur des selbst entwickelten Frameworks zur Lastgenerierung und Messwerterfassung.
6 AOP für Profiling: Detailliert die Integration der Messpunkte mittels Aspekten für EJB- und Web-Komponenten innerhalb von PerfLoad.
7 Performancevergleich: Vergleicht empirisch die Performance-Auswirkungen der manuellen Codierung gegenüber AspectJ und AspectWerkz in verschiedenen Lastszenarien.
8 Konfiguration: Bietet ein Tutorial für die instrumentierung von Anwendungen mit PerfLoad unter Verwendung der untersuchten AOP-Ansätze.
9 Fazit: Fasst die Ergebnisse zusammen und bewertet die Eignung der AOP-Technologien für die Performancemessung.
Schlüsselwörter
Aspektorientierte Programmierung, AOP, Performance, Lasttest, PerfLoad, AspectJ, AspectWerkz, Profiling, J2EE, Messwerterfassung, Instrumentierung, Bytecode-Modifikation, JMX, JVMPI, Software-Qualität.
Häufig gestellte Fragen
Worum geht es in dieser Arbeit grundsätzlich?
Die Arbeit beschäftigt sich mit der Entwicklung eines Frameworks, das es ermöglicht, J2EE-Anwendungen automatisch mit Messpunkten zu versehen, um während Lasttests performancerelevante Daten zu sammeln.
Was sind die zentralen Themenfelder?
Die zentralen Themen sind die performante Instrumentierung von Java-Enterprise-Anwendungen, der Einsatz von Aspektorientierter Programmierung (AOP) zur Modularisierung von Messlogik und die Architektur von Lasttest-Systemen.
Was ist das primäre Ziel oder die Forschungsfrage?
Ziel ist es, ein Framework zu schaffen, das J2EE-Systeme mit minimalem Overhead instrumentieren kann, wobei untersucht wird, welcher AOP-Ansatz dafür am besten geeignet ist.
Welche wissenschaftliche Methode wird verwendet?
Es wird ein experimenteller Ansatz verfolgt: Nach der theoretischen Analyse verschiedener Profiling- und AOP-Technologien wird ein eigenes Framework implementiert und in realitätsnahen Szenarien bezüglich seiner Performance und Bedienbarkeit evaluiert.
Was wird im Hauptteil behandelt?
Der Hauptteil gliedert sich in die Untersuchung von Profiling-Techniken, den Vergleich von AOP-Tools, die detaillierte Architektur des Frameworks PerfLoad und eine abschließende Performance-Evaluierung mittels Benchmarks.
Welche Schlüsselwörter charakterisieren die Arbeit?
Die Arbeit lässt sich primär durch Begriffe wie AOP, Lasttest, PerfLoad, AspectJ, Profiling und J2EE charakterisieren.
Warum reicht der Standard-JMX-Ansatz für diese Lasttests nicht aus?
JMX bietet zwar einfache Überwachungsmöglichkeiten, erlaubt aber keine flexible Veränderung der Messpunkte zur Laufzeit für tiefgreifende Diagnosen ohne hohen Overhead, was für detaillierte Lasttest-Analysen unzureichend ist.
Welcher der beiden AOP-Ansätze, AspectJ oder AspectWerkz, wird als besser für PerfLoad bewertet?
Die Arbeit kommt zu dem Schluss, dass AspectJ aufgrund seiner ausgereiften Toolunterstützung und Handhabbarkeit für die Instrumentierung von J2EE-Anwendungen in diesem Kontext die derzeit bessere Lösung darstellt, auch wenn beide Ansätze performant sind.
- Quote paper
- Michael Dempfle (Author), 2004, Entwurf und Implementierung eines Frameworks für Profiling- und Performancemessungen mit Hilfe von aspektorientierter Programmierung (AOP), Munich, GRIN Verlag, https://www.grin.com/document/31579