Ziel ist es, die Messdaten weitestgehend automatisch zu erzeugen. Dazu
werden die Hooks bei ihrer automatischen Erstellung durch die Beanbox-SW
instrumentiert. Die Instrumentierung von Javabeans soll nur in
Ausnahmefällen erforderlich sein. Ein Messobjekt sammelt die erzeugten
Messpunktdaten und gibt sie in ein Logfile aus, das als Ausgangsdatei für
weitere Verarbeitung dient.
Eine Übersicht über die wichtigsten Elemente des Prototyps ist
in der Abbildung dargestellt. Die Reihenfolge der Aufrufe
ergibt sich aus der Nummerierung. Alle aufgeführten Objekte liegen im
gleichen Kontrollfluss:
Zur Erstellung einer instrumentierten Anwendung ist erforderlich:
Javabeans, die keine eigenen Subthreads und keine Oberflächenelemente
enthalten, benötigen keine
Instrumentierung. Ihre Laufzeit wird durch Messpunkte in dem Hook
ermittelt, von dem sie aufgerufen werden. Feuern sie selbst noch einen
Event, so werden im folgenden Hook weitere Messpunkte gesetzt.
Die Zeiten werden im
Messobjekt ermittelt, die Zeitdifferenzen im Agenten, der der Ergebnisse des
Messobjekts auswertet.
Damit die erzeugten Messpunkte einer bestimmten Instanz einer
Benutzertransaktion (BTA) zugeordnet
werden können, muss diese einen eindeutigen Namen haben. Dieser
BTA_name
wird der BTA durch Customizing des StartButtons (allgemein des
Oberflächenelements mit dem die BTA gestartet wird) zugewiesen.
Im Messobjekt wird beim Ablauf des Prozesses der BTA_name mit
einer Zufallszahl zu einem
eindeutigen BTA-Instanznamen (BTA_ID) ergänzt.
Bei Javabeans, die eigene Subthreads erzeugen, müssen der Start und das
Ende des Threaddurchlaufs an das Messobjekt gemeldet werden. Dies geschieht
in dieser Fopra durch Instrumentierung der start- und der stop-
Methode der
Klasse BThread, die von der Bibliotheksklasse Thread erbt.
In einer Nachfolge-Fopra soll BThread durch die geänderte Klasse
Thread der
Javabibliothek ersetzt werden, da BThread nicht alle Beendigungsarten
erfasst, und eine Instrumentierung der Multithread-Javabeans erfordert.
In den Multithread-Javabeans müssen die Subthreads durch
- BThread thread = new BThread()
erzeugt werden. Dies entfällt, wenn in der Folge-Fopra die originale Klasse
Thread der Javabibliothek instrumentiert wird.
Aktive Javabeans erhalten Aufträge, die sie
zeitunabhängig von der auftraggebenden
BTA-Instanz durchgeführen. Damit die bei der Auftragsdurchführung
erzeugten Messpunkte (für Start und Ende) der auftraggebenden BTA-Instanz
zugeordnet werden können,
muss bei ihrer Erzeugung die BTA_ID an das Messobjekt übergeben werden.
Deshalb muss die aktive Javabeans bei Erhalt des Auftrags bei der Messbean
die BTA_ID des Auftraggebers abfragen. Das ist möglich, weil die
auftragempfangene Methode der aktiven Javabean im gleichen
Kontrollfluss ausgeführt wird wie die auftraggebende Methode:
- BTA_ID = MessBean.get_BTA_ID
Für die Erzeugung von Messpunkten
bei der Auftragsausführung ist erforderlich:
- ATA_start bzw. ATA_stop
Das Messobjekt stellt Methoden zur Zeiterfassung zur Verfügung, die von den
Hooks bzw. BThread oder aktiven Javabeans aufgerufen werden. Die
übergebenen Daten werden durch Zeitwerte ergänzt und periodisch in ein
Logfile geschrieben.
In diesem Prototyp werden nur der ActionEvent und ein selbsterstellter
AlterEvent zur Verkettung der Javabeans eingesetzt. Die verschiedenen
Mouse-Events eignen sich zum Anstoß des Startbuttons.
Der PropertyEvent ist
weniger geeignet, da er Daten gleichen Typs in Source und Target
voraussetzt, die auf gleiche Werte gesetzt werden sollen.