Ejemplo de staticField y staticInitializer

Este ejemplo muestra el uso del elemento de datos staticField y del fragmento de sonda StaticInitializer.

En este ejemplo, una sonda hace un seguimiento de cuándo se crean las instancias de una clase. Si una instancia se crea después de más de un segundo de la instancia anterior de dicha clase, la sonda escribe un mensaje de registro.

A continuación se explica lo que hace esta sonda:
  1. Utilizando el elemento de datos staticField, la sonda crea un campo estático de tipo Date en cada clase sondeada. El campo estático se inicializará llamando a new Date();.
  2. En el fragmento staticInitializer, la sonda establece la instancia Date de una clase sondeada en la "hora cero" (Enero de 1970) cuando se carga.
  3. En el fragmento entry, (debido a las reglas de destino, el fragmento entry sólo se ejecuta en los constructores), la sonda comprueba cuándo se ha realizado la actualización anterior y emite un informe si la actualización se ha realizado hace más de un segundo.
  4. Finalmente, la sonda actualiza el valor de la instancia Date a "now" (ahora).

Esta sonda utiliza staticField para crear un nuevo campo estático en cada clase sondeada. Por comparación, la utilización de fragmentAtClassScope para declarar el campo Date daría como resultado una única instancia de Date que aparece en la clase generada que contiene los fragmentos de sonda, sea cual sea el número de clases a las que se aplica la sonda. Puede hacerlo si desea hacer un seguimiento del retardo entre la creación de instancias de cualquier clase sondeada, en lugar de hacer un seguimiento del retardo entre la creación de instancias de cada clase sondeada.

Para utilizar este código de ejemplo, cambie package="com.sample*" en el objeto de destino para que haga referencia a un nombre de paquete real.

Tenga en cuenta que para utilizar los caracteres & y < en XML, debe especificar las entidades de tipo carácter &amp; y &lt;, como se muestra en el ejemplo.

<?xml version="1.0" encoding="ASCII"?>
<probekit>
  <probe>
    <target type="include" package="com.sample*" method="&lt;init>" />
    <target type="exclude" package="*" />
    <staticField type="java.util.Date"/>
    <fragment type="entry">
      <data name="lastInstanceDate" type="staticField"/>
      <data name="clname"/>
      <code>
         java.util.Date d = new java.util.Date();
         long now = d.getTime();
         long prev = lastInstanceDate.getTime();
         if (prev != 0 &amp;&amp; prev + 1000 &lt; now) {
           System.out.println("[" + clname + " instancia después de > 1 segundo]");
         }
         lastInstanceDate.setTime(now);
       </code>
    </fragment>
    <fragment type="staticInitializer">
      <data name="lastInstanceDate" type="staticField"/>
      <data name="clname"/>
      <code>
         lastInstanceDate.setTime(0);
         System.out.println("[" + clname + " clase cargada]");
      </code>
    </fragment>
  </probe>
</probekit>

Tema principal: Ejemplos de ProbeKit

Referencia relacionada
El objeto de sonda StaticField
El fragmento de sonda staticInitializer

Terms of use | Feedback
(C) Copyright IBM Corporation 2000, 2004. All Rights Reserved.