Here you can find the source of resolveServerClassLoader(Map env, MBeanServer mbs)
Parameter | Description |
---|---|
env | Environment attributes. |
mbs | The MBeanServer for which the connector server provides remote access. |
public static ClassLoader resolveServerClassLoader(Map env, MBeanServer mbs) throws InstanceNotFoundException
//package com.java2s; /*//from w w w . j a va 2s . c o m * @(#)EnvHelp.java 1.5 * * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2007 Sun Microsystems, Inc. All Rights Reserved. * * The contents of this file are subject to the terms of either the GNU General * Public License Version 2 only ("GPL") or the Common Development and * Distribution License("CDDL")(collectively, the "License"). You may not use * this file except in compliance with the License. You can obtain a copy of the * License at http://opendmk.dev.java.net/legal_notices/licenses.txt or in the * LEGAL_NOTICES folder that accompanied this code. See the License for the * specific language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each * file and include the License file found at * http://opendmk.dev.java.net/legal_notices/licenses.txt * or in the LEGAL_NOTICES folder that accompanied this code. * Sun designates this particular file as subject to the "Classpath" exception * as provided by Sun in the GPL Version 2 section of the License file that * accompanied this code. * * If applicable, add the following below the License Header, with the fields * enclosed by brackets [] replaced by your own identifying information: * * "Portions Copyrighted [year] [name of copyright owner]" * * Contributor(s): * * If you wish your version of this file to be governed by only the CDDL or * only the GPL Version 2, indicate your decision by adding * * "[Contributor] elects to include this software in this distribution * under the [CDDL or GPL Version 2] license." * * If you don't indicate a single choice of license, a recipient has the option * to distribute your version of this file under either the CDDL or the GPL * Version 2, or to extend the choice of license to its licensees as provided * above. However, if you add GPL Version 2 code and therefore, elected the * GPL Version 2 license, then the option applies only if the new code is made * subject to such option by the copyright holder. * */ import java.util.Map; import javax.management.ObjectName; import javax.management.MBeanServer; import javax.management.InstanceNotFoundException; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXConnectorServerFactory; public class Main { /** * <p>Name of the attribute that specifies a default class loader * object. * The value associated with this attribute is a ClassLoader object</p> */ private static final String DEFAULT_CLASS_LOADER = JMXConnectorFactory.DEFAULT_CLASS_LOADER; /** * <p>Name of the attribute that specifies a default class loader * ObjectName. * The value associated with this attribute is an ObjectName object</p> */ private static final String DEFAULT_CLASS_LOADER_NAME = JMXConnectorServerFactory.DEFAULT_CLASS_LOADER_NAME; /** * Get the Connector Server default class loader. * <p> * Returns: * <p> * <ul> * <li> * The ClassLoader object found in <var>env</var> for * <tt>jmx.remote.default.class.loader</tt>, if any. * </li> * <li> * The ClassLoader pointed to by the ObjectName found in * <var>env</var> for <tt>jmx.remote.default.class.loader.name</tt>, * and registered in <var>mbs</var> if any. * </li> * <li> * The current thread's context classloader otherwise. * </li> * </ul> * * @param env Environment attributes. * @param mbs The MBeanServer for which the connector server provides * remote access. * * @return the connector server's default class loader. * * @exception IllegalArgumentException if one of the following is true: * <ul> * <li>both * <tt>jmx.remote.default.class.loader</tt> and * <tt>jmx.remote.default.class.loader.name</tt> are specified, * </li> * <li>or * <tt>jmx.remote.default.class.loader</tt> is not * an instance of {@link ClassLoader}, * </li> * <li>or * <tt>jmx.remote.default.class.loader.name</tt> is not * an instance of {@link ObjectName}, * </li> * <li>or * <tt>jmx.remote.default.class.loader.name</tt> is specified * but <var>mbs</var> is null. * </li> * @exception InstanceNotFoundException if * <tt>jmx.remote.default.class.loader.name</tt> is specified * and the ClassLoader MBean is not found in <var>mbs</var>. */ public static ClassLoader resolveServerClassLoader(Map env, MBeanServer mbs) throws InstanceNotFoundException { if (env == null) return Thread.currentThread().getContextClassLoader(); Object loader = env.get(DEFAULT_CLASS_LOADER); Object name = env.get(DEFAULT_CLASS_LOADER_NAME); if (loader != null && name != null) { final String msg = "Only one of " + DEFAULT_CLASS_LOADER + " or " + DEFAULT_CLASS_LOADER_NAME + " should be specified."; throw new IllegalArgumentException(msg); } if (loader == null && name == null) return Thread.currentThread().getContextClassLoader(); if (loader != null) { if (loader instanceof ClassLoader) { return (ClassLoader) loader; } else { final String msg = "ClassLoader object is not an instance of " + ClassLoader.class.getName() + " : " + loader.getClass().getName(); throw new IllegalArgumentException(msg); } } ObjectName on; if (name instanceof ObjectName) { on = (ObjectName) name; } else { final String msg = "ClassLoader name is not an instance of " + ObjectName.class.getName() + " : " + name.getClass().getName(); throw new IllegalArgumentException(msg); } if (mbs == null) throw new IllegalArgumentException("Null MBeanServer object"); return mbs.getClassLoader(on); } }