연습 1.5: 복잡한 프로브 논리에 런타임 라이브러리 사용

시작하기 전에 연습 1.4: 고급 프로브 작성을 읽는 것이 좋습니다.

Probekit을 사용하면 간단한 Java 코드 단편으로 간단한 프로브를 쉽게 작성할 수 있습니다. 연습 1.4의 경우처럼 기본 프로브를 사용해도 복잡한 사항을 수행할 수 있습니다. 그러나 때로는 간단한 프로브를 사용해서는 원하는 대로 복잡한 사항을 수행할 수 없는 경우가 있습니다. 그러한 경우에는 실행할 모든 논리를 프로브 단편에 맞추는 대신 프로브용 "런타임 지원 라이브러리"를 작성할 수 있습니다. 그런 다음 모든 실제 조치가 있는 이 라이브러리를 프로브 단편이 호출하도록 할 수 있습니다.

런타임 라이브러리를 사용할 경우 반영(reflection)을 사용하여 메소드를 호출해야 할 경우가 있습니다. 그 이유는 생성된 프로브 클래스가 bootstrap 클래스 로더에 의해 로드되므로 system 클래스 로더에 의해 로드된 클래스에 직접 액세스할 수 없기 때문입니다.

다음은 런타임 라이브러리의 entryHandler 메소드를 호출하는 "시작" 단편의 예입니다.

호출할 정적 메소드 entryHandler를 사용하는 com.sample.ProbeSupport 클래스가 있다고 가정하십시오. entryHandler가 인수를 사용하지 않으며 클래스가 시스템 클래스 로더에 의해 로드될 수 있다고 가정하십시오.

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();
}

각 호출시의 시간 절약을 위해 클래스 범위의 단편을 사용하여 정적 java.lang.reflect.Method 객체를 선언하고 한 번만 초기화할 수 있습니다.

요약에 있는 내용을 검토하여 학습을 완료하십시오.

사용 약관 | 피드백
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.