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

📄 dynamicmbeanproxy.java

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            String name=methods[j].getName();                        if( name.startsWith( "get" ) ) {                if( methods[j].getParameterTypes().length != 0 ) {                    continue;                }                if( ! Modifier.isPublic( methods[j].getModifiers() ) ) {                    //log.debug("not public " + methods[j] );                    continue;                }                Class ret=methods[j].getReturnType();                if( ! supportedType( ret ) ) {                    if( log.isDebugEnabled() )                        log.debug("Unsupported " + ret );                    continue;                }                name=unCapitalize( name.substring(3));                getAttMap.put( name, methods[j] );                // just a marker, we don't use the value                 attMap.put( name, methods[j] );            } else if( name.startsWith( "is" ) ) {                // not used in our code. Add later            } else if( name.startsWith( "set" ) ) {                Class params[]=methods[j].getParameterTypes();                if( params.length != 1 ) {                    continue;                }                if( ! Modifier.isPublic( methods[j].getModifiers() ) )                    continue;                Class ret=params[0];                if( ! supportedType( ret ) ) {                    continue;                }                name=unCapitalize( name.substring(3));                setAttMap.put( name, methods[j] );                attMap.put( name, methods[j] );            } else {                if( methods[j].getParameterTypes().length != 0 ) {                    continue;                }                if( methods[j].getDeclaringClass() == Object.class )                    continue;                if( ! Modifier.isPublic( methods[j].getModifiers() ) )                    continue;                invokeAttMap.put( name, methods[j]);            }        }    }    /**     * @todo Find if the 'className' is the name of the MBean or     *       the real class ( I suppose first )     * @todo Read (optional) descriptions from a .properties, generated     *       from source     * @todo Deal with constructors     *            */    public MBeanInfo getMBeanInfo() {        if( methods==null ) {            init();        }        try {            MBeanAttributeInfo attributes[]=new MBeanAttributeInfo[attMap.size()];            Enumeration en=attMap.keys();            int i=0;            while( en.hasMoreElements() ) {                String name=(String)en.nextElement();                attributes[i++]=new MBeanAttributeInfo(name, "Attribute " + name ,                                                       (Method)getAttMap.get(name),                                                       (Method)setAttMap.get(name));            }                        MBeanOperationInfo operations[]=new MBeanOperationInfo[invokeAttMap.size()];                        en=invokeAttMap.keys();            i=0;            while( en.hasMoreElements() ) {                String name=(String)en.nextElement();                Method m=(Method)invokeAttMap.get(name);                if( m!=null && name != null ) {                    operations[i++]=new MBeanOperationInfo(name, m);                } else {                    System.out.println("Null arg " + name + " " + m );                }            }                        if( log.isDebugEnabled() )                log.debug(real.getClass().getName() +  " getMBeanInfo()");                        return new MBeanInfo( real.getClass().getName(), /* ??? */                                  "MBean for " + getName(),                                  attributes,                                  new MBeanConstructorInfo[0],                                  operations,                                  new MBeanNotificationInfo[0]);        } catch( Exception ex ) {            ex.printStackTrace();            return null;        }    }    static final Object[] NO_ARGS_PARAM=new Object[0];        public Object getAttribute(String attribute)        throws AttributeNotFoundException, MBeanException, ReflectionException    {        if( methods==null ) init();        Method m=(Method)getAttMap.get( attribute );        if( m==null ) throw new AttributeNotFoundException(attribute);        try {            if( log.isDebugEnabled() )                log.debug(real.getClass().getName() +  " getAttribute " + attribute);            return m.invoke(real, NO_ARGS_PARAM );        } catch( IllegalAccessException ex ) {            ex.printStackTrace();            throw new MBeanException( ex );        } catch( InvocationTargetException ex1 ) {            ex1.printStackTrace();            throw new MBeanException( ex1 );        }    }        public void setAttribute(Attribute attribute)        throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException    {        if( methods==null ) init();        // XXX Send notification !!!        Method m=(Method)setAttMap.get( attribute.getName() );        if( m==null ) throw new AttributeNotFoundException(attribute.getName());        try {            log.info(real.getClass().getName() +  "setAttribute " + attribute.getName());            m.invoke(real, new Object[] { attribute.getValue() } );        } catch( IllegalAccessException ex ) {            ex.printStackTrace();            throw new MBeanException( ex );        } catch( InvocationTargetException ex1 ) {            ex1.printStackTrace();            throw new MBeanException( ex1 );        }    }        /**     * Invoke a method. Only no param methods are supported at the moment     * ( init, start, execute, etc ) ( that's the most common pattern we have     *  in tomcat/ant/etc )     *     * @todo Implement invoke for methods with more arguments.     */    public Object invoke(String method, Object[] arguments, String[] params)        throws MBeanException, ReflectionException    {        if( methods==null ) init();        Method m=(Method)invokeAttMap.get( method );        if( m==null ) return null;        try {            log.info(real.getClass().getName() +  "invoke " + m.getName());            return m.invoke(real, NO_ARGS_PARAM );        } catch( IllegalAccessException ex ) {            throw new MBeanException( ex );        } catch( InvocationTargetException ex1 ) {            throw new MBeanException( ex1 );        }    }    // -------------------- Auxiliary methods --------------------        public AttributeList setAttributes(AttributeList attributes) {        Iterator attE=attributes.iterator();        while( attE.hasNext() ) {            Attribute att=(Attribute)attE.next();            try {                setAttribute( att );            } catch( Exception ex ) {                ex.printStackTrace();            }        }        return attributes;    }    public AttributeList getAttributes(String[] attributes) {        AttributeList al=new AttributeList();        if( attributes==null ) return null;                for( int i=0; i<attributes.length; i++ ) {            try {                Attribute att=new Attribute( attributes[i], getAttribute( attributes[i] ));                al.add( att );            } catch( Exception ex ) {                ex.printStackTrace();            }        }        return al;    }        // -------------------- Utils --------------------    public static String unCapitalize(String name) {	if (name == null || name.length() == 0) {	    return name;	}	char chars[] = name.toCharArray();	chars[0] = Character.toLowerCase(chars[0]);	return new String(chars);    }    private static org.apache.commons.logging.Log log=        org.apache.commons.logging.LogFactory.getLog( DynamicMBeanProxy.class );}

⌨️ 快捷键说明

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