Sondenobjekt 'Fragment'

Das Sondenobjekt Fragment spezifiziert die Logik einer Sonde. Es enthält den auszuführenden Java-Quellcode.

Es ist mindestens ein Objekt 'Fragment' erforderlich. Es enthält das Objekt 'Code' und alle Datenfelder, die vom Quellcode im Objekt 'Code' referenziert werden. Eine Sonde kann mehrere Fragment-Objekte enthalten, jedoch muss für jedes dieser Fragment-Objekte ein anderer type angegeben sein.

Das Objekt 'Fragment' enthält folgendes Merkmal:
Merkmal Beschreibung
type Erforderliches Merkmal. Für Method-Sonden muss das Merkmal auf entry, exit, catch, staticInitializer oder executableUnit gesetzt sein. Für Callsite-Sonden muss es auf beforeCall oder afterCall gesetzt sein. Method- und Callsite-Fragmente dürfen nicht zusammen in einer Sonde enthalten sein.
In der folgenden Tabelle sind die Fragmenttypen aufgelistet und beschrieben. Die Tabelle gibt auch an, in welchem Sondentyp der jeweilige Fragmenttyp verwendet werden kann.
Fragmenttyp Sondentyp Beschreibung
entry Method Fragmente des Typs entry werden beim Methodeneintritt ausgeführt. Fragmente des Typs entry werden nicht für Methoden ausgeführt, die vom Probekit in die Klasse eingefügt wurden.
exit Method Fragmente des Typs exit werden beim Methodenaustritt ausgeführt. Die Ausführung erfolgt bei einem normalen Methodenaustritt, wenn die Methode eine Ausnahme auslöst oder wenn eine ausgelöste Ausnahme über die Methode hinaus weitergegeben wird. Fragmente des Typs exit werden nicht für Methoden ausgeführt, die vom Probekit in die Klasse eingefügt wurden.
catch Method Fragmente des Typs catch werden ausgeführt, wenn in der Methode eine Klausel catch beginnt oder wenn eine Klausel finally beginnt, die infolge einer Ausnahme ausgeführt wird.
staticInitializer Method Fragmente des Typs staticInitializer werden innerhalb des Initialisierungsoperators jeder instrumentierten Klasse ausgeführt. Wenn die Klasse noch keinen Initialisierungsoperator hat, wird ein solcher erstellt. Weitere Informationen hierzu finden Sie im Artikel Sondenfragment 'staticInitializer'.
executableUnit Method Fragmente des Typs executableUnit werden vor allen ausführbaren Codeeinheiten ausgeführt, die in Methoden enthalten sind, die mit der Ziel und Filterspezifikation der Sonde übereinstimmen und für die Quellcode verfügbar ist. Wenn es für die Methode keine Quellenzeileninformationen gibt, erscheint sie als Methode mit nur einer ausführbaren Einheit, die die Nummer null hat. Weitere Informationen hierzu finden Sie im Artikel Sondenfragment 'executableUnit'.
beforeCall Callsite Fragmente des Typs beforeCall werden in der aufrufenden Methode unmittelbar vor dem Aufruf der Zielmethode ausgeführt. Dieser Typ ist für Method-Sonden nicht gültig.
afterCall Callsite Fragmente des Typs afterCall werden in der aufrufenden Methode unmittelbar nach dem Austritt aus der Zielmethode ausgeführt. Dies gilt sowohl für einen normalen Austritt als auch für einen Austritt, weil die Zielmethode eine Ausnahme ausgelöst hat. Dieser Typ ist für Method-Sonden nicht gültig.
Notes:
  • Wenn Sonden auf Methoden angewendet werden, die als synchronized deklariert sind, ist der Code in Fragmenten des Typs entry, exit und executableUnit nicht sicher vor einer gleichzeitigen Ausführung in mehreren Threads geschützt. Ein Fragment des Typs entry und die ersten executableUnit-Fragmente könnten beispielsweise ausgeführt werden, bevor die Logik für Methodensynchronisation eine Sperre erhält, und ein Fragment des Typs exit könnte ausgeführt werden, nachdem die Sperre freigegeben wurde.
  • Eine Sonde kann mehrere Fragmente enthalten, die auf dieselbe Stelle einer Methode anzuwenden sind, z. B. ein Fragment des Typs entry und die erste executableUnit-Position. Ein anderes Beispiel wäre ein Fragment des Typs catch mit der zugehörigen executableUnit-Position, da die catch-Klauseln für die Behandlung von Ausnahmen immer den Beginn einer neuen ausführbaren Einheit markieren. In diesen Fällen wird der Code des executableUnit-Fragments nach dem Code des entry- oder catch-Fragments ausgeführt. Eine der Konsequenzen ist, dass Fragmente des Typs entry, soweit vorhanden, immer vor anderen Fragmenten anderer Typen ausgeführt werden.
Beispiel:
<fragment type="entry"> 
   <data . . . />
   <code>
      . . . 
   </code>
</fragment>

Enthalten in:
Objekt 'Probe'

Übergeordnetes Thema: Referenzinformationen zu Probekit-Elementen

Zugehörige Verweise
Probekit-Beispiele
Sondenfragment 'executableUnit'
Sondenfragment 'staticInitializer'

Nutzungsbedingungen | Feedback
(C) Copyright IBM Corporation 2004. Alle Rechte vorbehalten.