next up previous contents index
Next: Implementierung eines prototypischen Managementagenten Up: Implementierung der Architektur für Previous: Implementierung des Meßobjekts

Instrumentierung von Systemklassen der Java Virtual Machine

 Die vorgeschlagene Architektur erfordert es, den Start sowie die Beendigung von Threads erkennen zu können, um die automatische Zuordnung von Meßwerten zu Transaktionen zu ermöglichen. Um eine Korrelation von Managementinformation verteilter Systeme zu gestatten, müssen darüber hinaus die Mechanismen zur Interprozeßkommunikation instrumentiert werden. Da JavaBeans typischerweise nicht zur Erstellung verteilter Anwendungen Verwendung finden, konnte in Rahmen der prototypischen Implementierung auf eine Instrumentierung der Interprozeßkommunikationsmechanismen verzichtet werden. Diese könnte allerdings durch Instrumentierung der Remote Method Invocation (RMI) Mechanismen von Java jederzeit erfolgen.

Eine Möglichkeit zur Ermittlung der Information über den Start und die Beendigung von Threads stellt in Version 1.2 des Java Development Kits (JDK) das sogenannte Java Virtual Machine Profiler Interface (JVMPI) [#!jvmpi99!#] bereit. Dies befindet sich aktuell allerdings noch in einem experimentellen Stadium und kann auch nur einen Teil der gewünschten Information liefern. Beispielsweise ist es mit Hilfe des JVMPI nicht möglich, das in einem neu gestarteten Thread auszuführende Objekt zu ermitteln.

Aus diesen Gründen wurde auf eine Verwendung des JVMPI verzichtet und stattdessen eine Instrumentierung der Klasse java.lang.Thread der JVM vorgenommen. Die Firma Sun stellt den Source Code der JVM zu derartigen Zwecken uneingeschränkt zur Verfügung [#!java2cs!#]. Vereinfacht ausgedrückt wurde die Methode start der Klasse java.lang.Thread dahingehend erweitert, daß sie einen Aufruf der Methode addControlFlow des Meßobjekts durchführt. So kann jeder Start eines Threads mit Sicherheit erkannt werden. Da die Methode start noch im aufrufenden Thread ausgeführt wird, ist eine Zuordnung des gestarteten Threads zu einer Instanz einer BTA zu diesem Zeitpunkt möglich. Desweiteren wurde in die Methode exit der Klasse java.lang.Thread ein Aufruf der Methode removeControlFlow eingefügt. Die Methode exit wird immer bei Beendigung eines Threads von der JVM aufgerufen und ermöglicht somit die sichere Identifikation der Beendigung beliebiger Threads.

Wenn zukünftig mit Hilfe des JVMPI (oder einer anderen Schnittstelle) neben der Benachrichtigung über den Start und das Ende von Threads auch das im neu gestarteten Thread auszuführende Objekt ermittelt werden kann, kann auf eine derartige Instrumentierung vollständig verzichtet werden und stattdessen eine Implementierung auf Basis des JVMPI eingesetzt werden.


next up previous contents index
Next: Implementierung eines prototypischen Managementagenten Up: Implementierung der Architektur für Previous: Implementierung des Meßobjekts
Copyright Munich Network Management Team