Ejercicio 1.5: Utilización de una biblioteca de tiempo de ejecución para obtener una lógica de sonda más compleja

Antes de empezar, es recomendable que lea el Ejercicio 1.4: Creación de sondas más avanzadas.

Con ProbeKit es muy sencillo escribir sondas simples con fragmentos de código Java simples. Tal como vio en el Ejercicio 1.4, incluso puede obtener algunos resultados sofisticados con sondas básicas. Pero, a veces, quiere obtener resultados más complejos, que no puede lograr con una sonda simple. En situaciones como ésta, en lugar de tratar de ajustar toda la lógica que desee ejecutar en fragmentos de sonda, puede crear una "biblioteca de soporte de tiempo de ejecución" para las sondas. De este modo, puede hacer que los fragmentos de sonda efectúen llamadas a esta biblioteca, donde se lleva a cabo la acción real.

Si decide utilizar una biblioteca de tiempo de ejecución, a veces es necesario utilizar el reflejo para llamar a los métodos. Esto es debido a que el cargador de clases bootstrap carga las clases de sondas generadas, y no se puede acceder directamente a las clases que carga el cargador de clases system.

A continuación figura un ejemplo, de un fragmento "entry" que llama a un método entryHandler en la biblioteca de tiempo de ejecución:

Supongamos que existe una clase com.sample.ProbeSupport que tiene un método estático entryHandler al que desea llamar. Supongamos que entryHandler no utiliza argumentos. Además, supongamos que el cargador de clases puede cargar la clase.

try {
  String className = "com.sample.ProbeSupport";
  ClassLoader sysLoader = ClassLoader.getSystemClassLoader();
  Class cls = Class.forName(className, true, sysLoader);
  java.lang.reflect.Method mth = cls.getMethod("entryHandler", null);
  mth.invoke(null, null);
}
catch (Throwable t) {
  System.out.println("Probe error while attempting reflection:");
  t.printStackTrace();
}

Para ahorrar tiempo en cada invocación, puede utilizar el fragmento del ámbito de la clase para declarar un objeto java.lang.reflect.Method estático e inicializarlo sólo una vez.

Finalice la guía de aprendizaje revisando los materiales de la sección Resumen.

Comentarios
(C) Copyright IBM Corporation 2000, 2005. Todos los derechos reservados.