Exercício 1.5: Utilizando uma Biblioteca de Tempo de Execução para Lógica de Probe Mais Complexa

Antes de iniciar, é uma boa idéia ler o Exercício 1.4: Criando Probes Mais Avançados.

Com o Probekit, é fácil gravar probes simples com fragmentos de código Java simples. Como viu no Exercício 1.4, você pode até mesmo fazer algumas coisas sofisticadas com probes básicos. Mas às vezes você deseja fazer algo ainda mais complexo, que não pode fazer com um probe simples. Em situações como essa, em vez de tentar ajustar toda a lógica que deseja executar em fragmentos de probe, é possível criar uma "biblioteca de suporte de tempo de execução" para seus probes. Em seguida, é possível fazer com que os fragmentos de probe façam chamadas a essa biblioteca, onde está toda a ação real.

Se decidir utilizar uma biblioteca de tempo de execução, por vezes será necessário utilizar reflexão para chamar seus métodos. Isso acontece porque as classes de probe geradas são carregadas pelo carregador de classes de auto-inicialização e não podem acessar diretamente as classes carregadas pelo carregador de classes do sistema.

Aqui está um exemplo de um fragmento de "entrada" que chama um método entryHandler na biblioteca de tempo de execução:

Assuma que exista uma classe com.sample.ProbeSupport com um método estático entryHandler que você deseja chamar. Assuma que entryHandler não recebe argumentos. Além disso, assuma que a classe pode ser carregada pelo carregador de classes do sistema.

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 economizar tempo em cada chamada, é possível utilizar o fragmento no escopo da classe para declarar um objeto estático java.lang.reflect.Method e inicializá-lo apenas uma vez.

Conclua este tutorial revisando os materiais no Resumo.

Feedback
(C) Copyright IBM Corporation 2000, 2005. Todos os Direitos Reservados.