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

📄 dynamicmbeanproxy.java

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation.  All rights  * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer.  * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, if *    any, must include the following acknowlegement:   *       "This product includes software developed by the  *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowlegement may appear in the software itself, *    if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software *    Foundation" must not be used to endorse or promote products derived *    from this software without prior written permission. For written  *    permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" *    nor may "Apache" appear in their names without prior written *    permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.tomcat.util.mx;import java.io.*;import java.net.*;import java.lang.reflect.*;import java.util.*;import javax.management.*;/** * DynamicMBean implementation using introspection to manage any * component that follows the bean/ant/Interceptor/Valve/Jk2 patterns. * * The class will wrap any component conforming to those patterns. * * @deprecated The same functionality ( and more ) is now available in *         commons-modeler * @author Costin Manolache */public class DynamicMBeanProxy implements DynamicMBean {    Object real;    String name;        Method methods[]=null;    Hashtable attMap=new Hashtable();    // key: attribute val: getter method    Hashtable getAttMap=new Hashtable();    // key: attribute val: setter method    Hashtable setAttMap=new Hashtable();    // key: operation val: invoke method    Hashtable invokeAttMap=new Hashtable();    static MBeanServer mserver=null;    static Hashtable instances=new Hashtable();        /** Create a Dynamic proxy, using introspection to manage a     *  real tomcat component.     */    public DynamicMBeanProxy() {            }    public void setName(String name ) {        this.name=name;    }    public String getName() {        if( name!=null ) return name;        if( real==null ) return null;        name=generateName(real.getClass());        return name;    }    /** If a name was not provided, generate a name based on the     *  class name and a sequence number.     */    public static String generateName(Class realClass) {        String name=realClass.getName();        name=name.substring( name.lastIndexOf( ".") + 1 );        Integer iInt=(Integer)instances.get(name );        int seq=0;        if( iInt!= null ) {            seq=iInt.intValue();            seq++;            instances.put( name, new Integer( seq ));        } else {            instances.put( name, new Integer( 0 ));        }        return "name=" + name + ",seq=" + seq;    }    public static String createMBean( Object proxy, String domain, String name ) {        try {            DynamicMBeanProxy mbean=new DynamicMBeanProxy();            mbean.setReal( proxy );            if( name!=null ) {                mbean.setName( name );            } else {                mbean.setName( generateName( proxy.getClass() ));            }            return mbean.registerMBean( domain );        } catch( Throwable t ) {            log.error( "Error creating mbean ", t );            return null;        }    }        public String registerMBean( String domain ) {        try {            // XXX use aliases, suffix only, proxy.getName(), etc            String fullName=domain + ": " +  getName();            ObjectName oname=new ObjectName( fullName );            if(  getMBeanServer().isRegistered( oname )) {                log.info("Unregistering " + oname );                getMBeanServer().unregisterMBean( oname );            }            getMBeanServer().registerMBean( this, oname );            return fullName;        } catch( Throwable t ) {            log.error( "Error creating mbean ", t );            return null;        }    }    public static void unregisterMBean( Object o, String name ) {        try {            ObjectName oname=new ObjectName( name );            getMBeanServer().unregisterMBean( oname );        } catch( Throwable t ) {            log.error( "Error unregistering mbean ", t );        }    }    public static MBeanServer getMBeanServer() {        if( mserver==null ) {            if( MBeanServerFactory.findMBeanServer(null).size() > 0 ) {                mserver=(MBeanServer)MBeanServerFactory.findMBeanServer(null).get(0);            } else {                mserver=MBeanServerFactory.createMBeanServer();            }        }                return mserver;    }    private boolean supportedType( Class ret ) {        return ret == String.class ||            ret == Integer.class ||            ret == Integer.TYPE ||            ret == Long.class ||            ret == Long.TYPE ||            ret == java.io.File.class ||            ret == Boolean.class ||            ret == Boolean.TYPE             ;     }        /** Set the managed object.     *     * @todo Read an XML ( or .properties ) file containing descriptions,     *       generated from source comments     * @todo Also filter methods based on config ( hide methods/attributes )     * @todo Adapters for notifications ( Interceptor hooks, etc ).      */    public void setReal( Object realBean ) {        real=realBean;    }    private void init() {        if( methods!=null ) return;        methods = real.getClass().getMethods();        for (int j = 0; j < methods.length; ++j) {

⌨️ 快捷键说明

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