diff options
author | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2007-01-15 22:28:46 +0000 |
---|---|---|
committer | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2007-01-15 22:28:46 +0000 |
commit | 7070005b041a9b35306616d213a92fdad63cd3ef (patch) | |
tree | fe17d10e59a19b14cd8a9ee93c51694a89eff43c /javax | |
parent | f4ca03d66ceb6a3b8231d03b998e6e5e93c1e020 (diff) | |
download | classpath-7070005b041a9b35306616d213a92fdad63cd3ef.tar.gz |
2007-01-15 Andrew John Hughes <gnu_andrew@member.fsf.org>
* javax/management/AttributeValueExp.java:
Corrected serialVersionUID typo.
* javax/management/DefaultLoaderRepository.java:
New file.
* javax/management/MBeanServerFactory.java:
Add generic typing.
Diffstat (limited to 'javax')
-rw-r--r-- | javax/management/AttributeValueExp.java | 2 | ||||
-rw-r--r-- | javax/management/DefaultLoaderRepository.java | 148 | ||||
-rw-r--r-- | javax/management/MBeanServerFactory.java | 12 |
3 files changed, 155 insertions, 7 deletions
diff --git a/javax/management/AttributeValueExp.java b/javax/management/AttributeValueExp.java index 9fc0a5df9..42e7161f8 100644 --- a/javax/management/AttributeValueExp.java +++ b/javax/management/AttributeValueExp.java @@ -51,7 +51,7 @@ public class AttributeValueExp /** * Compatible with JDK 1.5 */ - private static final long serialVersionUID = -776802504653916338L; + private static final long serialVersionUID = -7768025046539163385L; /** * The name of the attribute. diff --git a/javax/management/DefaultLoaderRepository.java b/javax/management/DefaultLoaderRepository.java new file mode 100644 index 000000000..0f0a875fd --- /dev/null +++ b/javax/management/DefaultLoaderRepository.java @@ -0,0 +1,148 @@ +/* DefaultLoaderRepository.java -- Manages class loaders for the servers. + Copyright (C) 2007 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.management; + +import java.util.List; + +/** + * Maintains a list of the {@link ClassLoader} instances + * registered with the management servers, allowing it + * to be used to load classes. In early versions of the + * JMX API, this class represented a shared repository for + * the classloaders of all management servers. The management + * of classloaders is now decentralised and this class is + * deprecated. The old behaviour is emulated by consulting + * the {@link MBeanServer#getClassLoaderRepository()} method + * of all the servers obtained from + * {@link MBeanServerFactory#findMBeanServer(String)}. Use of + * this class should be avoided in new code. + * + * @author Andrew John Hughes (gnu_andrew@member.fsf.org) + * @since 1.5 + * @deprecated Use {@link MBeanServer#getClassLoaderRepository()} + * instead. + */ +@Deprecated public class DefaultLoaderRepository +{ + + /** + * Attempts to load the given class using class loaders + * supplied by the repository of each {@link MBeanServer}. + * The {@link ClassLoader#loadClass(String)} + * method of each class loader is called. If the method + * returns successfully, then the returned {@link Class} instance + * is returned. If a {@link ClassNotFoundException} is thrown, + * then the next loader is tried. Any other exception thrown + * by the method is passed back to the caller. This method + * throws a {@link ClassNotFoundException} itself if all the + * class loaders listed prove fruitless. + * + * @param name the name of the class to load. + * @return the loaded class. + * @throws ClassNotFoundException if all the class loaders fail + * to load the class. + */ + public Class loadClass(String name) + throws ClassNotFoundException + { + List<MBeanServer> servers = MBeanServerFactory.findMBeanServer(null); + for (MBeanServer server : servers) + { + try + { + return server.getClassLoaderRepository().loadClass(name); + } + catch (ClassNotFoundException e) + { + /* Ignored; try the next server. */ + } + } + throw new ClassNotFoundException("The class loaders of all registered " + + "servers failed to load the class, " + + name); + } + + /** + * <p> + * Attempts to load the given class using class loaders + * supplied by the repository of each {@link MBeanServer}. + * The {@link ClassLoader#loadClass(String)} + * method of each class loader is called. If the method + * returns successfully, then the returned {@link Class} instance + * is returned. If a {@link ClassNotFoundException} is thrown, + * then the next loader is tried. Any other exception thrown + * by the method is passed back to the caller. This method + * throws a {@link ClassNotFoundException} itself if all the + * class loaders listed prove fruitless. + * </p> + * <p> + * Note that this method may deadlock if called simultaneously + * by two class loaders in the list. + * {@link loadClassBefore(ClassLoader, String)} should be used + * in preference to this method to avoid this. + * </p> + * + * @param exclude the class loader to exclude, or <code>null</code> + * to obtain the same behaviour as {@link #loadClass(String)}. + * @param name the name of the class to load. + * @return the loaded class. + * @throws ClassNotFoundException if all the class loaders fail + * to load the class. + */ + public Class loadClassWithout(ClassLoader exclude, String name) + throws ClassNotFoundException + { + List<MBeanServer> servers = MBeanServerFactory.findMBeanServer(null); + for (MBeanServer server : servers) + { + try + { + return server.getClassLoaderRepository().loadClassWithout(exclude, + name); + } + catch (ClassNotFoundException e) + { + /* Ignored; try the next server. */ + } + } + throw new ClassNotFoundException("The class loaders of all registered " + + "servers failed to load the class, " + + name); + } + +} diff --git a/javax/management/MBeanServerFactory.java b/javax/management/MBeanServerFactory.java index e265f62fd..54195635b 100644 --- a/javax/management/MBeanServerFactory.java +++ b/javax/management/MBeanServerFactory.java @@ -89,7 +89,7 @@ public class MBeanServerFactory /** * The map of registered servers (identifiers to servers). */ - private static final Map servers = new HashMap(); + private static final Map<Object,MBeanServer> servers = new HashMap(); /** * Private constructor to prevent instance creation. @@ -206,15 +206,15 @@ public class MBeanServerFactory * caller's permissions don't imply {@link * MBeanServerPermission(String)}("findMBeanServer") */ - public static ArrayList findMBeanServer(String id) + public static ArrayList<MBeanServer> findMBeanServer(String id) { SecurityManager sm = System.getSecurityManager(); if (sm != null) sm.checkPermission(new MBeanServerPermission("findMBeanServer")); if (id == null) return new ArrayList(servers.values()); - ArrayList list = new ArrayList(); - MBeanServer server = (MBeanServer) servers.get(id); + ArrayList<MBeanServer> list = new ArrayList<MBeanServer>(); + MBeanServer server = servers.get(id); if (server != null) list.add(servers.get(id)); return list; @@ -395,10 +395,10 @@ public class MBeanServerFactory SecurityManager sm = System.getSecurityManager(); if (sm != null) sm.checkPermission(new MBeanServerPermission("releaseMBeanServer")); - Iterator i = servers.values().iterator(); + Iterator<MBeanServer> i = servers.values().iterator(); while (i.hasNext()) { - MBeanServer s = (MBeanServer) i.next(); + MBeanServer s = i.next(); if (server == s) { i.remove(); |