0N/A/*
2362N/A * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
2362N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
2362N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/Apackage javax.management.loading;
0N/A
0N/Aimport static com.sun.jmx.defaults.JmxProperties.MBEANSERVER_LOGGER;
0N/Aimport java.util.Iterator;
0N/Aimport java.util.List;
0N/Aimport java.util.logging.Level;
0N/Aimport javax.management.MBeanServer;
0N/Aimport javax.management.MBeanServerFactory;
0N/A
0N/A/**
0N/A * <p>Keeps the list of Class Loaders registered in the MBean Server.
0N/A * It provides the necessary methods to load classes using the registered
0N/A * Class Loaders.</p>
0N/A *
0N/A * <p>This deprecated class is maintained for compatibility. In
0N/A * previous versions of JMX, there was one
0N/A * <code>DefaultLoaderRepository</code> shared by all MBean servers.
0N/A * As of JMX 1.2, that functionality is approximated by using {@link
0N/A * MBeanServerFactory#findMBeanServer} to find all known MBean
0N/A * servers, and consulting the {@link ClassLoaderRepository} of each
0N/A * one. It is strongly recommended that code referencing
0N/A * <code>DefaultLoaderRepository</code> be rewritten.</p>
0N/A *
0N/A * @deprecated Use
0N/A * {@link javax.management.MBeanServer#getClassLoaderRepository()}}
0N/A * instead.
0N/A *
0N/A * @since 1.5
0N/A */
0N/A@Deprecated
0N/Apublic class DefaultLoaderRepository {
0N/A
0N/A /**
0N/A * Go through the list of class loaders and try to load the requested
0N/A * class.
0N/A * The method will stop as soon as the class is found. If the class
0N/A * is not found the method will throw a <CODE>ClassNotFoundException</CODE>
0N/A * exception.
0N/A *
0N/A * @param className The name of the class to be loaded.
0N/A *
0N/A * @return the loaded class.
0N/A *
0N/A * @exception ClassNotFoundException The specified class could not be
0N/A * found.
0N/A */
686N/A public static Class<?> loadClass(String className)
0N/A throws ClassNotFoundException {
0N/A MBEANSERVER_LOGGER.logp(Level.FINEST,
0N/A DefaultLoaderRepository.class.getName(),
0N/A "loadClass", className);
0N/A return load(null, className);
0N/A }
0N/A
0N/A /**
0N/A * Go through the list of class loaders but exclude the given
0N/A * class loader, then try to load
0N/A * the requested class.
0N/A * The method will stop as soon as the class is found. If the class
0N/A * is not found the method will throw a <CODE>ClassNotFoundException</CODE>
0N/A * exception.
0N/A *
0N/A * @param className The name of the class to be loaded.
0N/A * @param loader The class loader to be excluded.
0N/A *
0N/A * @return the loaded class.
0N/A *
0N/A * @exception ClassNotFoundException The specified class could not be
0N/A * found.
0N/A */
686N/A public static Class<?> loadClassWithout(ClassLoader loader,
0N/A String className)
0N/A throws ClassNotFoundException {
0N/A MBEANSERVER_LOGGER.logp(Level.FINEST,
0N/A DefaultLoaderRepository.class.getName(),
0N/A "loadClassWithout", className);
0N/A return load(loader, className);
0N/A }
0N/A
686N/A private static Class<?> load(ClassLoader without, String className)
0N/A throws ClassNotFoundException {
686N/A final List<MBeanServer> mbsList = MBeanServerFactory.findMBeanServer(null);
0N/A
686N/A for (MBeanServer mbs : mbsList) {
0N/A ClassLoaderRepository clr = mbs.getClassLoaderRepository();
0N/A try {
0N/A return clr.loadClassWithout(without, className);
0N/A } catch (ClassNotFoundException e) {
0N/A // OK : Try with next one...
0N/A }
0N/A }
0N/A throw new ClassNotFoundException(className);
0N/A }
0N/A
0N/A }