1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
/* * @(#)DefaultLoaderRepository.java 1.19 05/11/17 * * Copyright 2006 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; /** * <p>Keeps the list of Class Loaders registered in the MBean Server. * It provides the necessary methods to load classes using the registered * Class Loaders.</p> * * <p>This deprecated class is maintained for compatibility. In * previous versions of JMX, there was one * <code>DefaultLoaderRepository</code> 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 * <code>DefaultLoaderRepository</code> be rewritten.</p> * * @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 <CODE>ClassNotFoundException</CODE> * 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 <CODE>ClassNotFoundException</CODE> * 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); } }