/* * @(#)DefaultLoaderRepository.java 1.18 04/05/18 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package javax.management.loading; // Java import import java.security.AccessController; import java.security.Permission; import java.util.Iterator; import java.util.List; // JMX import import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.loading.ClassLoaderRepository; import com.sun.jmx.trace.Trace; /** *

Keeps the list of Class Loaders registered in the MBean Server. * It provides the necessary methods to load classes using the registered * Class Loaders.

* *

This deprecated class is maintained for compatibility. In * previous versions of JMX, there was one * DefaultLoaderRepository shared by all MBean servers. * As of JMX 1.2, that functionality is approximated by using {@link * MBeanServerFactory#findMBeanServer} to find all known MBean * servers, and consulting the {@link ClassLoaderRepository} of each * one. It is strongly recommended that code referencing * DefaultLoaderRepository be rewritten.

* * @deprecated Use * {@link javax.management.MBeanServer#getClassLoaderRepository()}} * instead. * * @since 1.5 */ @Deprecated public class DefaultLoaderRepository { private static final String dbgTag = "DefaultLoaderRepository"; /** * Go through the list of class loaders and try to load the requested * class. * The method will stop as soon as the class is found. If the class * is not found the method will throw a ClassNotFoundException * exception. * * @param className The name of the class to be loaded. * * @return the loaded class. * * @exception ClassNotFoundException The specified class could not be * found. */ public static Class loadClass(String className) throws ClassNotFoundException { debug("loadClass",className); return load(null, className); } /** * Go through the list of class loaders but exclude the given * class loader, then try to load * the requested class. * The method will stop as soon as the class is found. If the class * is not found the method will throw a ClassNotFoundException * exception. * * @param className The name of the class to be loaded. * @param loader The class loader to be excluded. * * @return the loaded class. * * @exception ClassNotFoundException The specified class could not be * found. */ public static Class loadClassWithout(ClassLoader loader, String className) throws ClassNotFoundException { debug("loadClassWithout",className); return load(loader, className); } private static Class load(ClassLoader without, String className) throws ClassNotFoundException { final List mbsList = MBeanServerFactory.findMBeanServer(null); for (Iterator it = mbsList.iterator(); it.hasNext(); ) { MBeanServer mbs = (MBeanServer) it.next(); ClassLoaderRepository clr = mbs.getClassLoaderRepository(); try { return clr.loadClassWithout(without, className); } catch (ClassNotFoundException e) { // OK : Try with next one... } } throw new ClassNotFoundException(className); } // TRACES & DEBUG //--------------- private static boolean isTraceOn() { return Trace.isSelected(Trace.LEVEL_TRACE, Trace.INFO_MBEANSERVER); } private static void trace(String clz, String func, String info) { Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MBEANSERVER, clz, func, info); } private static void trace(String func, String info) { trace(dbgTag, func, info); } private static boolean isDebugOn() { return Trace.isSelected(Trace.LEVEL_DEBUG, Trace.INFO_MBEANSERVER); } private static void debug(String clz, String func, String info) { Trace.send(Trace.LEVEL_DEBUG, Trace.INFO_MBEANSERVER, clz, func, info); } private static void debug(String func, String info) { debug(dbgTag, func, info); } }