Um den Zugriff von beliebigen Stellen innerhalb der zu überwachenden Anwendung sowie aus der JVM heraus zu ermöglichen, wurde eine Klasse Messung definiert, die die Meßschnittstelle mittels statischer Methoden zur Verfügung stellt. Somit ist innerhalb der Anwendung keine explizite Referenz auf das Meßobjekt erforderlich. Die Klasse Messung instantiiert lediglich das eigentliche Meßobjekt und leitet die Aufrufe der Meßschnittstelle an das Meßobjekt weiter; darüber hinaus implementiert sie keine eigene Funktionalität.
Innerhalb des Meßobjektes wird mit Hilfe einer Hash-Tabelle eine
Abbildung von Threads zu Instanzen von BTAs hergestellt. Bei
jedem Aufruf einer Methode der Meßschnittstelle wird anhand des
ausführenden Threads aus der eben beschriebenen Hash-Tabelle
die Zuordnung zu einer Instanz einer BTA hergestellt. Die aktuelle
Systemzeit wird bestimmt und gemeinsam mit weiteren Informationen in
einem Vektor gespeichert. Um dies zu verdeutlichen, stellt Abbildung die Implementierung der Methoden startBTA und startTA
nochmals vereinfacht dar. In der Methode startBTA wird zunächst
mit Hilfe der aktuellen Systemzeit sowie eines Zufallswertes, ein
eindeutiger Identifikator für die Instanz der gestarteten BTA
erzeugt. Dieser Identifikator wird dann gemeinsam mit dem Identifikator des
aktuellen Thread (mit Hilfe der put-Methode) in die
Hash-Tabelle btaTab eingefügt. In der Methode
startTA (sowie in jeder anderen Methode des Meßobjekts) kann dann
der Name des aktuellen Thread (mit Hilfe der get-Methode)
aus ebendieser Hash-Tabelle wieder ermittelt werden. Die
Informationen über die gestartete Subtransaktion (aktuelle Zeit,
Bausteinname, Name der Subtransaktion, etc.) werden dann gemeinsam mit
dem Identifikator der BTA in einer Datenstruktur messPunkt
gesammelt und in dem Vektor messTabelle gespeichert.
In regelmäßigen Abständen wird ein Thread niedriger Priorität gestartet, der die im Vektor gesammelten Daten über eine Socket-Schnittstelle an den Managementagenten außerhalb des Prozesses der überwachten Anwendung übergibt. Durch die Verwendung einer Socket-Schnittstelle wurde sowohl die Möglichkeit geschaffen, die Information über Systemgrenzen hinweg zu übermitteln, als auch Unabhängigkeit von der gewählten Programmiersprache erreicht.