Mengelt, Dominik and Egli, Frederick (2011) JaInFra Java Inspection Framework. Student Research Project thesis, HSR Hochschule für Technik Rapperswil.
Java_Inspection_Framework.pdf - Supplemental Material
Download (2MB) | Preview
Abstract
Das Java Inspection Framework, kurz JaInFra, ist eine API, die es ermöglicht, kompilierten Code zu analysieren und zu verändern, ohne den originalen Sourcecode zu besitzen. Die API muss lediglich als JAR File in den eigenen Code eingebunden werden. Danach sind keine weiteren Zusatzpakete erforderlich. Intern arbeitet JaInFra mit AspectJ und Reflection. Letzteres wird benötigt, um statische Analysen über das unbekannte Programm zu erstellen. Somit hat man Zugriff auf die Methoden und Felder einer kompilierten Klasse.
AspectJ erweitert Java, damit aspekt-orientierte Programmierung möglich wird. Dadurch lassen sich generische Funktionalitäten über mehrere Klassen verwenden. Das Verweben dieser Funktionalitäten mit dem eigentlichen Code, nennt sich weaving. In JaInFra wird AspectJ benötigt, um das Programm während der Laufzeit zu analysieren und gegebenenfalls zu verändern. Da AspectJ kein Runtimeweaving unterstützt, benutzt JaInFra das Loadtimeweaving. Bevor das nbekannte Programm mittels Reflection in einem
eigenen Thread gestartet wird, "weavt" sich JaInFra in praktisch jeden erdenklichen Abschnitt des Programms ein (Beispiel: vor einem Methodenaufruf und danach). Der Kunde kann JaInFra über sogenannte Filter mitteilen, was er überhaupt Inspizieren m�öchte. Die Filter wurden mittels dem Interpreter Pattern erstellt. Somit lassen sich beliebig viele Konstrukte bilden, um ein Maximum an Flexibilität zu gewährleisten. Ist ein Filter während der Programmausführung befriedigt, wird ein Callback zum Kunden
ausgeführt. Der Kunde kann dabei selber entscheiden, was bei einem Callback passiert, indem er das entsprechende Interface ausprogrammiert. So ist es zum Beispiel möglich,
die gewünschten Trace Inhalte, wie Signaturnamen und Argumentinhalte, in einem File abzuspeichern.
Die Injection geschieht ebenfalls mit Hilfe von Filtern und Callback Interfaces. Dabei k�önnen zwei unterschiedliche Injektionsverfahren angewendet werden. Einerseits lassen
sich return Werte einer Methode abändern und andererseits können Felder beim Schreiben oder Lesen mit einem eigenen Wert überschrieben werden.
Das Inspizieren und Verändern von Code kann während der gesamten Laufzeit des unbekannten Programms gestartet, gestoppt oder verändert werden.
Item Type: | Thesis (Student Research Project) |
---|---|
Subjects: | Topics > Software > Refactoring Area of Application > Development Tools Technologies > Programming Languages > Java |
Divisions: | Bachelor of Science FHO in Informatik > Student Research Project |
Depositing User: | OST Deposit User |
Contributors: | Contribution Name Email Thesis advisor Letsch, Thomas UNSPECIFIED |
Date Deposited: | 24 Jul 2012 07:57 |
Last Modified: | 24 Jul 2012 09:35 |
URI: | https://eprints.ost.ch/id/eprint/181 |