고친 과정 | |
---|---|
고침 $Revision: 1.2 $ | $Date: 2002/09/27 09:34:16 $ |
1.
왜 MBeanServer.createMBean("my.class.Name", new ObjectName("domain:key=value"))
은 ClassNotFoundException를 던지는가?
이것은 JMX 스펙상에서 빠진 부분이며 JMX 1.2에서 고쳐질 것이다.
JMX RI는 기본적으로 시스템 클래스 로더(이것은 classpath로부터 클래스들을 로드한다.)를
DefaultLoaderRepository에 삽입하였다.
MBeanServer는 특정한 클래스를 찾기위해 DefaultLoaderRepository를
호출한다.
그러나, JMX 스펙에서는 DefaultLoaderRepository가
클래스로더 가운데 시스템 클래스로더를 가져야 하고 게다가 MBean들이
java.lang.ClassLoader의 인스턴스라고 명시하지 않았다.
(물론 시스템 클래스로더는 MBean이 아니다.)
따라서 JMX RI에서 문서화하지 않으 이런 기능들 때문에 여러분의 어플리케이션은
JMX 구현간에 서로 호환이 되지 않게(non-portable) 된다.
이런 문제를 해결하기 위한 방법으로는 위의 실행을 overloaded 하는 버전을 사용하는 것이다.
MBeanServer.createMBean("my.class.Name", new ObjectName("domain:key=value"), null)
.
이 클래스는 MBeanServer를 로드한 클래스로더
(일반적으로 시스템 클래스로더)와 같은 클래스로더에 의해 로딩된다.
그리고 JMX RI에서도 잘 작동한다.(다른 JMX 구현에서 마찬가지로)