Esercizio 1.5: Uso di una libreria di runtime per una logica di analisi più complessa

Prima di iniziare, è necessario leggere l'Esercizio 1.4: Creazione di analisi più avanzate.

Con Probekit è facile scrivere analisi non complesse con semplici frammenti di codice Java. Come si è visto nell'Esercizio 1.4, è possibile fare anche delle operazioni più complesse con analisi di base. Ma a volte si desidera fare qualcosa di più complesso, qualcosa che non è possibile fare con una semplice analisi. In situazioni di questo tipo, anziché adattare la logica che si desidera eseguire nei frammenti di analisi, è possibile creare una "libreria di supporto di runtime" per le analisi in uso. Quindi è possibile che i frammenti di analisi faranno delle chiamate in questa libreria, dove si trova la vera azione.

Se si decide di utilizzare una libreria di runtime, a volte è necessario utilizzare una copia per richiamare i suoi metodi. Ciò accade perché le classi di analisi generate vengono caricate dal caricatore delle classi bootstrap, e non è possibile accedere direttamente alle classi caricate dal caricatore di classi di sistema.

Di seguito è riportato un esempio di un frammento "entry" che richiama il metodo entryHandler nella libreria di runtime:

Presupporre che vi sia una classe com.sample.ProbeSupport con un metodo statico entryHandler che si desidera richiamare. Presupporre che entryHandler non prenda argomenti. Inoltre, presupporre che la classe possa essere caricata dal caricatore di classi di 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();
}

Per risparmiare tempo ad ogni singola chiamata, è possibile utilizzare il frammento a livello di classe per dichiarare un oggetto java.lang.reflect.Method statico ed inizializzarlo una sola volta.

Terminare questa esercitazione revisionando il materiale nel Riepilogo.

Terminologia | Feedback
(C) Copyright IBM Corporation 2000, 2005. Tutti i diritti riservati.