private void initialize(MBeanInstantiator instantiator, MetaData meta, String domain) { this.instantiator = instantiator; if (instantiator == null) throw new IllegalArgumentException("instantiator must not be null."); this.meta = (meta == null ? new MetaDataImpl(instantiator) : meta); this.secureClr = new SecureClassLoaderRepository(instantiator.getClassLoaderRepository()); if (domain != null) { interceptor = new DefaultMBeanInterceptor(this, domain); } else { interceptor = new DefaultMBeanInterceptor(this); } // Create the MBeanServer identification MBean try { MBeanServerDelegateObject = new MBeanServerDelegateImpl(new MBeanServerDelegate()); MBeanServerDelegateObjectName = new ObjectName(ServiceName.DELEGATE); interceptor.registerMBean(MBeanServerDelegateObject, MBeanServerDelegateObjectName); } catch (JMException e) { // This should never happen! final RuntimeException r = new RuntimeException("Unexpected JMException: " + e); Utils.initCause(r, e); throw r; } ClassLoader myLoader = this.getClass().getClassLoader(); final ModifiableClassLoaderRepository loaders = instantiator.getClassLoaderRepository(); if (loaders != null && myLoader != null) { loaders.addClassLoader(myLoader); } }
/** * Implements {@link MBeanServer#getClassLoader(ObjectName)}. Contrarily to JMX 1.2 * specifications, this methods only works for ClassLoaders that are registered in the * ClassLoaderRepository. If you need a fully JMX 1.2 compatible MBeanServer use {@link * JdmkMBeanServerBuilder} to create one. * * @since Java DMK 5.1 (JMX 1.2) */ public ClassLoader getClassLoader(ObjectName loaderName) throws InstanceNotFoundException { if (interceptor instanceof MBeanServerInterceptor) { return ((MBeanServerInterceptor) interceptor).getClassLoader(loaderName); } final ModifiableClassLoaderRepository loaders = instantiator.getClassLoaderRepository(); final ClassLoader loader; synchronized (instantiator) { loader = loaders.getClassLoader(loaderName); } if (loader == null) { throw new InstanceNotFoundException( "The loader named " + loaderName + " is not registered in the MBeanServer"); } return loader; }