/* * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ package javax.management.loading; import javax.management.MBeanServer; // for Javadoc /** *
Instances of this interface are used to keep the list of ClassLoaders * registered in an MBean Server. * They provide the necessary methods to load classes using the registered * ClassLoaders.
* *The first ClassLoader in a ClassLoaderRepository
is
* always the MBean Server's own ClassLoader.
When an MBean is registered in an MBean Server, if it is of a
* subclass of {@link java.lang.ClassLoader} and if it does not
* implement the interface {@link PrivateClassLoader}, it is added to
* the end of the MBean Server's ClassLoaderRepository
.
* If it is subsequently unregistered from the MBean Server, it is
* removed from the ClassLoaderRepository
.
The order of MBeans in the ClassLoaderRepository
is
* significant. For any two MBeans X and Y in the
* ClassLoaderRepository
, X must appear before
* Y if the registration of X was completed before
* the registration of Y started. If X and
* Y were registered concurrently, their order is
* indeterminate. The registration of an MBean corresponds to the
* call to {@link MBeanServer#registerMBean} or one of the {@link
* MBeanServer}.createMBean
methods.
Load the given class name through the list of class loaders. * Each ClassLoader in turn from the ClassLoaderRepository is * asked to load the class via its {@link * ClassLoader#loadClass(String)} method. If it successfully * returns a {@link Class} object, that is the result of this * method. If it throws a {@link ClassNotFoundException}, the * search continues with the next ClassLoader. If it throws * another exception, the exception is propagated from this * method. If the end of the list is reached, a {@link * ClassNotFoundException} is thrown.
* * @param className The name of the class to be loaded. * * @return the loaded class. * * @exception ClassNotFoundException The specified class could not be * found. */ public Class> loadClass(String className) throws ClassNotFoundException; /** *Load the given class name through the list of class loaders,
* excluding the given one. Each ClassLoader in turn from the
* ClassLoaderRepository, except exclude
, is asked to
* load the class via its {@link ClassLoader#loadClass(String)}
* method. If it successfully returns a {@link Class} object,
* that is the result of this method. If it throws a {@link
* ClassNotFoundException}, the search continues with the next
* ClassLoader. If it throws another exception, the exception is
* propagated from this method. If the end of the list is
* reached, a {@link ClassNotFoundException} is thrown.
Be aware that if a ClassLoader in the ClassLoaderRepository * calls this method from its {@link ClassLoader#loadClass(String) * loadClass} method, it exposes itself to a deadlock if another * ClassLoader in the ClassLoaderRepository does the same thing at * the same time. The {@link #loadClassBefore} method is * recommended to avoid the risk of deadlock.
* * @param className The name of the class to be loaded. * @param exclude The class loader to be excluded. May be null, * in which case this method is equivalent to {@link #loadClass * loadClass(className)}. * * @return the loaded class. * * @exception ClassNotFoundException The specified class could not * be found. */ public Class> loadClassWithout(ClassLoader exclude, String className) throws ClassNotFoundException; /** *Load the given class name through the list of class loaders,
* stopping at the given one. Each ClassLoader in turn from the
* ClassLoaderRepository is asked to load the class via its {@link
* ClassLoader#loadClass(String)} method. If it successfully
* returns a {@link Class} object, that is the result of this
* method. If it throws a {@link ClassNotFoundException}, the
* search continues with the next ClassLoader. If it throws
* another exception, the exception is propagated from this
* method. If the search reaches stop
or the end of
* the list, a {@link ClassNotFoundException} is thrown.
Typically this method is called from the {@link
* ClassLoader#loadClass(String) loadClass} method of
* stop
, to consult loaders that appear before it
* in the ClassLoaderRepository
. By stopping the
* search as soon as stop
is reached, a potential
* deadlock with concurrent class loading is avoided.