⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 introspector.java

📁 JAVA的一些源码 JAVA2 STANDARD EDITION DEVELOPMENT KIT 5.0
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * @(#)Introspector.java	1.68 03/12/19 *  * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.jmx.mbeanserver;// Java importimport java.lang.reflect.Constructor;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import java.util.ArrayList;import java.util.List;import java.util.Iterator;// RI Importimport javax.management.IntrospectionException;import javax.management.MBeanAttributeInfo;import javax.management.MBeanConstructorInfo;import javax.management.MBeanInfo;import javax.management.MBeanOperationInfo;import javax.management.MBeanParameterInfo;import javax.management.NotCompliantMBeanException;/** * This class contains the methods for performing all the tests needed to verify * that a class represents a JMX compliant MBean. * * @since 1.5 */public class Introspector {        /*     * ------------------------------------------     *  PRIVATE VARIABLES     * ------------------------------------------     */    private static final String attributeDescription =	"Attribute exposed for management";    private static final String operationDescription =	"Operation exposed for management";    private static final String constructorDescription =	"Public constructor of the MBean";    private static final String mbeanInfoDescription =	"Information on the management interface of the MBean";         /*     * ------------------------------------------     *  PRIVATE CONSTRUCTORS     * ------------------------------------------     */    // private constructor defined to "hide" the default public constructor    private Introspector() {	// ------------------------------ 	// ------------------------------	    }        /*     * ------------------------------------------     *  PUBLIC METHODS     * ------------------------------------------     */    /**     * Tell whether a MBean of the given class is a Dynamic MBean.     * This method does nothing more than returning     * <pre>     * javax.management.DynamicMBean.class.isAssignableFrom(c)     * </pre>     * This method does not check for any JMX MBean compliance:     * <ul><li>If <code>true</code> is returned, then instances of      *     <code>c</code> are DynamicMBean.</li>     *     <li>If <code>false</code> is returned, then no further     *     assumption can be made on instances of <code>c</code>.     *     In particular, instances of <code>c</code> may, or may not     *     be JMX standard MBeans.</li>     * </ul>     * @param c The class of the MBean under examination.     * @return <code>true</code> if instances of <code>c</code> are     *         Dynamic MBeans, <code>false</code> otherwise.      *     * @since.unbundled JMX RI 1.2     **/    public static final boolean isDynamic(final Class c) {	// Check if the MBean implements the DynamicMBean interface	return javax.management.DynamicMBean.class.isAssignableFrom(c);    }    /**     * Basic method for testing that a MBean of a given class can be     * instantiated by the MBean server.<p>     * This method checks that:     * <ul><li>The given class is a concrete class.</li>     *     <li>The given class exposes at least one public constructor.</li>     * </ul>     * If these conditions are not met, throws a NotCompliantMBeanException.     * @param c The class of the MBean we want to create.     * @exception NotCompliantMBeanException if the MBean class makes it     *            impossible to instantiate the MBean from within the     *            MBeanServer.     *     * @since.unbundled JMX RI 1.2     **/    public static void testCreation(Class c) 	throws NotCompliantMBeanException {	// Check if the class is a concrete class	final int mods = c.getModifiers(); 	if (Modifier.isAbstract(mods) || Modifier.isInterface(mods)) {	    throw new NotCompliantMBeanException("MBean class must be concrete");	}	// Check if the MBean has a public constructor 	final Constructor[] consList = c.getConstructors();     	if (consList.length == 0) {	    throw new NotCompliantMBeanException("MBean class must have public constructor");	}    }        /**     * Basic method for testing if a given class is a JMX compliant MBean.     *     * @param baseClass The class to be tested     *     * @return <code>null</code> if the MBean is a DynamicMBean,      *         the computed {@link javax.management.MBeanInfo} otherwise.     * @exception NotCompliantMBeanException The specified class is not a      *            JMX compliant MBean     */        public static MBeanInfo testCompliance(Class baseClass) 	throws NotCompliantMBeanException {	// ------------------------------ 	// ------------------------------		// Check if the MBean implements the MBean or the Dynamic 	// MBean interface	if (isDynamic(baseClass)) 	    return null;		return testCompliance(baseClass, null);    }        /**     * Basic method for testing if a given class is a JMX compliant MBean.     *     * @param baseClass The class to be tested     *     * @return <code>null</code> if the MBean is a DynamicMBean,      *         the computed {@link javax.management.MBeanInfo} otherwise.     * @exception NotCompliantMBeanException The specified class is not a      *            JMX compliant MBean     */        static MBeanInfo testCompliance(final Class baseClass,				    Class mbeanInterface) 	    throws NotCompliantMBeanException {		if (baseClass.isInterface()) 	    throw new NotCompliantMBeanException(baseClass.getName() + 						 " must be a class.");	// ------------------------------ 	// ------------------------------	if (mbeanInterface == null)	    // No interface specified: look for default MBean interface.	    mbeanInterface = getStandardMBeanInterface(baseClass);	else if (! mbeanInterface.isAssignableFrom(baseClass)) {	    // specified interface not implemented by given class	    final String msg =		baseClass.getName() + " does not implement the " + 		mbeanInterface.getName() + " interface";	    throw new NotCompliantMBeanException(msg);	} else if (! mbeanInterface.isInterface()) {	    // Base class X, but XMBean is not an interface	    final String msg =		baseClass.getName() + ": " + mbeanInterface.getName() + 		" is not an interface";	    throw new NotCompliantMBeanException(msg);	}	if (mbeanInterface == null) {	    // Error: MBean does not implement javax.management.DynamicMBean 	    // nor MBean interface	    final String baseClassName = baseClass.getName();	    final String msg =		baseClassName + " does not implement the " + baseClassName +		"MBean interface or the DynamicMBean interface";	    throw new NotCompliantMBeanException(msg);	}		final int mods = mbeanInterface.getModifiers();	if (!Modifier.isPublic(mods)) 	    throw new NotCompliantMBeanException(mbeanInterface.getName() + 						 " implemented by " +						 baseClass.getName() + 						 " must be public");	return (introspect(baseClass, mbeanInterface));    }        /**     * Get the MBean interface implemented by a JMX standard MBean      * class.     *     * @param baseClass The class to be tested     *      * @return The MBean interface implemented by the MBean.      *         Return <code>null</code> if the MBean is a DynamicMBean,      *         or if no MBean interface is found.     *     */    public static Class getMBeanInterface(Class baseClass) {	// ------------------------------ 	// ------------------------------		// Check if the MBean implements the MBean or the Dynamic 	// MBean interface	if (isDynamic(baseClass)) return null;	return getStandardMBeanInterface(baseClass);         }        /**     * Get the MBean interface implemented by a JMX standard MBean      * class.     *     * @param baseClass The class to be tested     *      * @return The MBean interface implemented by the MBean.      *         Return <code>null</code> if no MBean interface is found.     *         Does not check whether the MBean is a DynamicMBean.     *     */    static Class getStandardMBeanInterface(Class baseClass) {	// ------------------------------ 	// ------------------------------		Class current = baseClass;	Class mbeanInterface = null;		while (current != null) {	    mbeanInterface = 		findMBeanInterface(current, current.getName());	    if (mbeanInterface != null) break;	    current = current.getSuperclass();	}	return mbeanInterface;    }    /*     * ------------------------------------------     *  PRIVATE METHODS     * ------------------------------------------     */        /**     * Try to find the MBean interface corresponding to the class aName      * - i.e. <i>aName</i>MBean, from within aClass and its superclasses.     **/    private static Class findMBeanInterface(Class aClass, String aName) {	Class current = aClass;	while (current != null) {	    final Class[] interfaces = current.getInterfaces();   	    final int len = interfaces.length;	    for (int i=0;i<len;i++)  {	     		final Class inter = 		    implementsMBean(interfaces[i], aName);		if (inter != null) return inter;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -