120 lines · 4.5 KB · Java
RawDownload
/* * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.  Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package javax.management.loading; import static com.sun.jmx.defaults.JmxProperties.MBEANSERVER_LOGGER;import java.util.Iterator;import java.util.List;import java.util.logging.Level;import javax.management.MBeanServer;import javax.management.MBeanServerFactory; /** * <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 */@Deprecatedpublic class 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 {        MBEANSERVER_LOGGER.logp(Level.FINEST,                DefaultLoaderRepository.class.getName(),                "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 {        MBEANSERVER_LOGGER.logp(Level.FINEST,                DefaultLoaderRepository.class.getName(),                "loadClassWithout", className);        return load(loader, className);    }     private static Class<?> load(ClassLoader without, String className)            throws ClassNotFoundException {        final List<MBeanServer> mbsList = MBeanServerFactory.findMBeanServer(null);         for (MBeanServer mbs : mbsList) {            ClassLoaderRepository clr = mbs.getClassLoaderRepository();            try {                return clr.loadClassWithout(without, className);            } catch (ClassNotFoundException e) {                // OK : Try with next one...            }        }        throw new ClassNotFoundException(className);    }  }