FileDocCategorySizeDatePackage
MBeanFactory.javaAPI DocGlassfish v2 API45165Fri May 04 22:32:10 BST 2007org.apache.catalina.mbeans

MBeanFactory

public class MBeanFactory extends com.sun.org.apache.commons.modeler.BaseModelMBean

A ModelMBean implementation for the org.apache.catalina.core.StandardServer component.

author
Amy Roh
version
$Revision: 1.6 $ $Date: 2007/05/05 05:32:09 $

Fields Summary
private static MBeanServer
mserver
The MBeanServer for this application.
private static com.sun.org.apache.commons.modeler.Registry
registry
The configuration information registry for our managed beans.
Constructors Summary
public MBeanFactory()
Construct a ModelMBean with default ModelMBeanInfo information.

exception
MBeanException if the initializer of an object throws an exception
exception
RuntimeOperationsException if an IllegalArgumentException occurs



    // ----------------------------------------------------------- Constructors


                                   
     
           

        super();

    
Methods Summary
public java.lang.StringcreateAccessLoggerValve(java.lang.String parent)
Create a new AccessLoggerValve.

param
parent MBean Name of the associated parent component
exception
Exception if an MBean cannot be created or registered


        ObjectName pname = new ObjectName(parent);
        // Create a new AccessLogValve instance
        AccessLogValve accessLogger = new AccessLogValve();
        ContainerBase containerBase = getParentContainerFromParent(pname);
        // Add the new instance to its parent component
        containerBase.addValve(accessLogger);
        ObjectName oname = accessLogger.getObjectName();
        return (oname.toString());

    
public java.lang.StringcreateAjpConnector(java.lang.String parent, java.lang.String address, int port)
Create a new AjpConnector

param
parent MBean Name of the associated parent component
param
address The IP address on which to bind
param
port TCP port number to listen on
exception
Exception if an MBean cannot be created or registered


        Object retobj = null;
        try {
            // Create a new CoyoteConnector instance for AJP
            // use reflection to avoid j-t-c compile-time circular dependencies
            Class cls = Class.forName("org.apache.coyote.tomcat5.CoyoteConnector");
            Constructor ct = cls.getConstructor((Class[])null);
            retobj = ct.newInstance((Object[])null);
            Class partypes1 [] = new Class[1];
            // Set address
            String str = new String();
            if ((address!=null) && (address.length()>0)) {
                partypes1[0] = str.getClass();
                Method meth1 = cls.getMethod("setAddress", partypes1);
                Object arglist1[] = new Object[1];
                arglist1[0] = address;
                meth1.invoke(retobj, arglist1);
            }
            // Set port number
            Class partypes2 [] = new Class[1];
            partypes2[0] = Integer.TYPE;
            Method meth2 = cls.getMethod("setPort", partypes2);
            Object arglist2[] = new Object[1];
            arglist2[0] = Integer.valueOf(port);
            meth2.invoke(retobj, arglist2);
            // set protocolHandlerClassName for AJP
            Class partypes3 [] = new Class[1];
            partypes3[0] = str.getClass();
            Method meth3 = cls.getMethod("setProtocolHandlerClassName", partypes3);
            Object arglist3[] = new Object[1];
            arglist3[0] = "org.apache.jk.server.JkCoyoteHandler";
            meth3.invoke(retobj, arglist3);

            // Add the new instance to its parent component
            ObjectName pname = new ObjectName(parent);
            Service service = getService(pname);
            service.addConnector((Connector)retobj);
            Method getObjectName = cls.getMethod("getObjectName", (Class[])null);
            
            // Return the corresponding MBean name
            //ObjectName coname = (ObjectName)getObjectName.invoke(retobj, null);
            ObjectName coname = 
                MBeanUtils.createObjectName(pname.getDomain(), (Connector)retobj);
            return (coname.toString());
        
        } catch (Exception e) {
            throw new MBeanException(e);
        }

    
public java.lang.StringcreateDefaultContext(java.lang.String parent)
Create a new DefaultContext.

param
parent MBean Name of the associated parent component
exception
Exception if an MBean cannot be created or registered

        // XXX FIXME
        // Create a new StandardDefaultContext instance
        StandardDefaultContext context = new StandardDefaultContext();

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        Service service = getService(pname);       
        Engine engine = (Engine) service.getContainer();
        String hostName = pname.getKeyProperty("host");
        if (hostName == null) { //if DefaultContext is nested in Engine
            context.setParent(engine);
            engine.addDefaultContext(context);
        } else {                // if DefaultContext is nested in Host
            Host host = (Host) engine.findChild(hostName);
            context.setParent(host);
            host.addDefaultContext(context);
        }

        // Return the corresponding MBean name
        ManagedBean managed = registry.findManagedBean("DefaultContext");
        ObjectName oname =
            MBeanUtils.createObjectName(managed.getDomain(), context);
        return (oname.toString());

    
public java.lang.StringcreateFileLogger(java.lang.String parent)
Create a new FileLogger.

param
parent MBean Name of the associated parent component
exception
Exception if an MBean cannot be created or registered


        // Create a new FileLogger instance
        FileLogger fileLogger = new FileLogger();

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        ContainerBase containerBase = getParentContainerFromParent(pname);
        // Add the new instance to its parent component
        containerBase.setLogger(fileLogger);
        // Return the corresponding MBean name
        ObjectName oname = fileLogger.getObjectName();
        return (oname.toString());

    
public java.lang.StringcreateHttpConnector(java.lang.String parent, java.lang.String address, int port)
Create a new HttpConnector

param
parent MBean Name of the associated parent component
param
address The IP address on which to bind
param
port TCP port number to listen on
exception
Exception if an MBean cannot be created or registered


        Object retobj = null;
        try {
            // Create a new CoyoteConnector instance
            // use reflection to avoid j-t-c compile-time circular dependencies
            Class cls = Class.forName("org.apache.coyote.tomcat5.CoyoteConnector");
            Constructor ct = cls.getConstructor((Class[])null);
            retobj = ct.newInstance((Object[])null);
            Class partypes1 [] = new Class[1];
            // Set address
            String str = new String();
            if ((address!=null) && (address.length()>0)) {
                partypes1[0] = str.getClass();
                Method meth1 = cls.getMethod("setAddress", partypes1);
                Object arglist1[] = new Object[1];
                arglist1[0] = address;
                meth1.invoke(retobj, arglist1);
            }
            // Set port number
            Class partypes2 [] = new Class[1];
            partypes2[0] = Integer.TYPE;
            Method meth2 = cls.getMethod("setPort", partypes2);
            Object arglist2[] = new Object[1];
            arglist2[0] = Integer.valueOf(port);
            meth2.invoke(retobj, arglist2);
            // Add the new instance to its parent component
            ObjectName pname = new ObjectName(parent);
            Service service = getService(pname);
            service.addConnector((Connector)retobj);
            Method getObjectName = cls.getMethod("getObjectName",(Class[])null);
            
            // Return the corresponding MBean name
            ObjectName coname = (ObjectName)getObjectName.invoke(retobj,(Object[]) null);
            //ObjectName coname = 
            //    MBeanUtils.createObjectName(pname.getDomain(), (Connector)retobj);
            return (coname.toString());
        } catch (Exception e) {
            throw new MBeanException(e);
        }

    
public java.lang.StringcreateHttpsConnector(java.lang.String parent, java.lang.String address, int port)
Create a new HttpsConnector

param
parent MBean Name of the associated parent component
param
address The IP address on which to bind
param
port TCP port number to listen on
exception
Exception if an MBean cannot be created or registered


        Object retobj = null;
        // Create a new CoyoteConnector instance
        // use reflection to avoid j-t-c compile-time circular dependencies
        Class cls = Class.forName("org.apache.coyote.tomcat5.CoyoteConnector");
        try {
            Constructor ct = cls.getConstructor((Class[])null);
            retobj = ct.newInstance((Object[])null);
            Class partypes1 [] = new Class[1];
            // Set address
            String str = new String();
            if ((address!=null) && (address.length()>0)) {
                partypes1[0] = str.getClass();
                Method meth1 = cls.getMethod("setAddress", partypes1);
                Object arglist1[] = new Object[1];
                arglist1[0] = address;
                meth1.invoke(retobj, arglist1);
            }
            // Set port number
            Class partypes2 [] = new Class[1];
            partypes2[0] = Integer.TYPE;
            Method meth2 = cls.getMethod("setPort", partypes2);
            Object arglist2[] = new Object[1];
            arglist2[0] = Integer.valueOf(port);
            meth2.invoke(retobj, arglist2);
            // Set scheme
            Class partypes3 [] = new Class[1];
            partypes3[0] = str.getClass();
            Method meth3 = cls.getMethod("setScheme", partypes3);
            Object arglist3[] = new Object[1];
            arglist3[0] = "https";
            meth3.invoke(retobj, arglist3);
            // Set secure
            Class partypes4 [] = new Class[1];
            partypes4[0] = Boolean.TYPE;
            Method meth4 = cls.getMethod("setSecure", partypes4);
            Object arglist4[] = new Object[1];
            arglist4[0] = Boolean.TRUE;
            meth4.invoke(retobj, arglist4);
            // Set factory
            Class serverSocketFactoryCls =
                Class.forName("org.apache.catalina.net.ServerSocketFactory");
            Class coyoteServerSocketFactoryCls =
                Class.forName("org.apache.coyote.tomcat5.CoyoteServerSocketFactory");
            Constructor factoryConst =
                     coyoteServerSocketFactoryCls.getConstructor((Class[])null);
            Object factoryObj = factoryConst.newInstance((Object[])null);
            Class partypes5 [] = new Class[1];
            partypes5[0] = serverSocketFactoryCls;
            Method meth5 = cls.getMethod("setFactory", partypes5);
            Object arglist5[] = new Object[1];
            arglist5[0] = factoryObj;
            meth5.invoke(retobj, arglist5);
        } catch (Exception e) {
            throw new MBeanException(e);
        }

        try {
            // Add the new instance to its parent component
            ObjectName pname = new ObjectName(parent);
            Service service = getService(pname);
            service.addConnector((Connector)retobj);
            Method getObjectName = cls.getMethod("getObjectName",(Class[])null);
            
            // Return the corresponding MBean name
            //ObjectName coname = (ObjectName)getObjectName.invoke(retobj, null);
            ObjectName coname = 
                MBeanUtils.createObjectName(pname.getDomain(), (Connector)retobj);
            return (coname.toString());
        } catch (Exception e) {
            // FIXME
            // disply error message
            // the user needs to use keytool to configure SSL first
            // addConnector will fail otherwise
            return null;
        }

    
public java.lang.StringcreateJDBCRealm(java.lang.String parent, java.lang.String driverName, java.lang.String connectionName, java.lang.String connectionPassword, java.lang.String connectionURL)
Create a new JDBC Realm.

param
parent MBean Name of the associated parent component
exception
Exception if an MBean cannot be created or registered


        // Create a new JDBCRealm instance
        JDBCRealm realm = new JDBCRealm();
	realm.setDriverName(driverName);
	realm.setConnectionName(connectionName);
	realm.setConnectionPassword(connectionPassword);
	realm.setConnectionURL(connectionURL);

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        ContainerBase containerBase = getParentContainerFromParent(pname);
        // Add the new instance to its parent component
        containerBase.setRealm(realm);
        // Return the corresponding MBean name
        ObjectName oname = realm.getObjectName();
        // FIXME getObjectName() returns null
        //ObjectName oname = 
        //    MBeanUtils.createObjectName(pname.getDomain(), realm);
        if (oname != null) {
            return (oname.toString());
        } else {
            return null;
        }   

    
public java.lang.StringcreateJNDIRealm(java.lang.String parent)
Create a new JNDI Realm.

param
parent MBean Name of the associated parent component
exception
Exception if an MBean cannot be created or registered


         // Create a new JNDIRealm instance
        JNDIRealm realm = new JNDIRealm();

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        ContainerBase containerBase = getParentContainerFromParent(pname);
        // Add the new instance to its parent component
        containerBase.setRealm(realm);
        // Return the corresponding MBean name
        ObjectName oname = realm.getObjectName();
        // FIXME getObjectName() returns null
        //ObjectName oname = 
        //    MBeanUtils.createObjectName(pname.getDomain(), realm);
        if (oname != null) {
            return (oname.toString());
        } else {
            return null;
        }   


    
public java.lang.StringcreateMemoryRealm(java.lang.String parent)
Create a new Memory Realm.

param
parent MBean Name of the associated parent component
exception
Exception if an MBean cannot be created or registered


         // Create a new MemoryRealm instance
        MemoryRealm realm = new MemoryRealm();

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        ContainerBase containerBase = getParentContainerFromParent(pname);
        // Add the new instance to its parent component
        containerBase.setRealm(realm);
        // Return the corresponding MBean name
        //ObjectName oname = realm.getObjectName();
        // FIXME getObjectName() returns null
        ObjectName oname = 
            MBeanUtils.createObjectName(pname.getDomain(), realm);
        if (oname != null) {
            return (oname.toString());
        } else {
            return null;
        }   

    
public java.lang.StringcreateRemoteAddrValve(java.lang.String parent)
Create a new Remote Address Filter Valve.

param
parent MBean Name of the associated parent component
exception
Exception if an MBean cannot be created or registered


        // Create a new RemoteAddrValve instance
        RemoteAddrValve valve = new RemoteAddrValve();

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        ContainerBase containerBase = getParentContainerFromParent(pname);
        containerBase.addValve(valve);
        ObjectName oname = valve.getObjectName();
        return (oname.toString());

    
public java.lang.StringcreateRemoteHostValve(java.lang.String parent)
Create a new Remote Host Filter Valve.

param
parent MBean Name of the associated parent component
exception
Exception if an MBean cannot be created or registered


        // Create a new RemoteHostValve instance
        RemoteHostValve valve = new RemoteHostValve();

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        ContainerBase containerBase = getParentContainerFromParent(pname);
        containerBase.addValve(valve);
        ObjectName oname = valve.getObjectName();
        return (oname.toString());
        
    
public java.lang.StringcreateRequestDumperValve(java.lang.String parent)
Create a new Request Dumper Valve.

param
parent MBean Name of the associated parent component
exception
Exception if an MBean cannot be created or registered


        // Create a new RequestDumperValve instance
        RequestDumperValve valve = new RequestDumperValve();

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        ContainerBase containerBase = getParentContainerFromParent(pname);
        containerBase.addValve(valve);
        ObjectName oname = valve.getObjectName();
        return (oname.toString());

    
public java.lang.StringcreateSingleSignOn(java.lang.String parent)
Create a new Single Sign On Valve.

param
parent MBean Name of the associated parent component
exception
Exception if an MBean cannot be created or registered


        // Create a new SingleSignOn instance
        SingleSignOn valve = new SingleSignOn();

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        ContainerBase containerBase = getParentContainerFromParent(pname);
        containerBase.addValve(valve);
        ObjectName oname = valve.getObjectName();
        return (oname.toString());

    
public java.lang.StringcreateStandardContext(java.lang.String parent, java.lang.String path, java.lang.String docBase)
Create a new StandardContext.

param
parent MBean Name of the associated parent component
param
path The context path for this Context
param
docBase Document base directory (or WAR) for this Context
exception
Exception if an MBean cannot be created or registered


        // Create a new StandardContext instance
        StandardContext context = new StandardContext();
        path = getPathStr(path);
        context.setPath(path);
        context.setDocBase(docBase);
        ContextConfig contextConfig = new ContextConfig();
        context.addLifecycleListener(contextConfig);

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        Service service = getService(pname);
        Engine engine = (Engine) service.getContainer();
        Host host = (Host) engine.findChild(pname.getKeyProperty("host"));
        host.addChild(context);

        // Return the corresponding MBean name
        ObjectName oname = 
            MBeanUtils.createObjectName(pname.getDomain(), context);
        return (oname.toString());

    
public java.util.VectorcreateStandardEngineService(java.lang.String parent, java.lang.String engineName, java.lang.String defaultHost, java.lang.String serviceName)
Create a new StandardEngine.

param
parent MBean Name of the associated parent component
param
name Unique name of this Engine
param
defaultHost Default hostname of this Engine
exception
Exception if an MBean cannot be created or registered


        // Create a new StandardService instance
        StandardService service = new StandardService();
        service.setName(serviceName);
        // Create a new StandardEngine instance
        StandardEngine engine = new StandardEngine();
        engine.setName(engineName);
        engine.setDefaultHost(defaultHost);
        // Need to set engine before adding it to server in order to set domain
        service.setContainer(engine);
        // Add the new instance to its parent component
        Server server = ServerFactory.getServer();
        server.addService(service);
        Vector onames = new Vector();
        // FIXME service & engine.getObjectName
        //ObjectName oname = engine.getObjectName();
        ObjectName oname = 
            MBeanUtils.createObjectName(engineName, engine);
        onames.add(0, oname);
        //oname = service.getObjectName();
        oname = 
            MBeanUtils.createObjectName(engineName, service);
        onames.add(1, oname);
        return (onames);

    
public java.lang.StringcreateStandardHost(java.lang.String parent, java.lang.String name, java.lang.String appBase, boolean autoDeploy, boolean deployXML, boolean liveDeploy, boolean unpackWARs, boolean xmlNamespaceAware, boolean xmlValidation)
Create a new StandardHost.

param
parent MBean Name of the associated parent component
param
name Unique name of this Host
param
appBase Application base directory name
param
autoDeploy Should we auto deploy?
param
deployXML Should we deploy Context XML config files property?
param
liveDeploy Should we live deploy?
param
unpackWARs Should we unpack WARs when auto deploying?
param
xmlNamespaceAware Should we turn on/off XML namespace awareness?
param
xmlValidation Should we turn on/off XML validation?
exception
Exception if an MBean cannot be created or registered


        // Create a new StandardHost instance
        StandardHost host = new StandardHost();
        host.setName(name);
        host.setAppBase(appBase);
        host.setAutoDeploy(autoDeploy);
        host.setDeployXML(deployXML);
        host.setLiveDeploy(liveDeploy);
        host.setUnpackWARs(unpackWARs);
        host.setXmlNamespaceAware(xmlNamespaceAware);
        host.setXmlValidation(xmlValidation);

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        Service service = getService(pname);
        Engine engine = (Engine) service.getContainer();
        engine.addChild(host);

        // Return the corresponding MBean name
        return (host.getObjectName().toString());

    
public java.lang.StringcreateStandardManager(java.lang.String parent)
Create a new StandardManager.

param
parent MBean Name of the associated parent component
exception
Exception if an MBean cannot be created or registered


        // Create a new StandardManager instance
        StandardManager manager = new StandardManager();

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        ContainerBase containerBase = getParentContainerFromParent(pname);
        if (containerBase != null) {
            containerBase.setManager(manager);
        } 
        ObjectName oname = manager.getObjectName();
        if (oname != null) {
            return (oname.toString());
        } else {
            return null;
        }
        
    
public java.lang.StringcreateStandardService(java.lang.String parent, java.lang.String name, java.lang.String domain)
Create a new StandardService.

param
parent MBean Name of the associated parent component
param
name Unique name of this StandardService
exception
Exception if an MBean cannot be created or registered


        // Create a new StandardService instance
        StandardService service = new StandardService();
        service.setName(name);

        // Add the new instance to its parent component
        Server server = ServerFactory.getServer();
        server.addService(service);

        // Return the corresponding MBean name
        return (service.getObjectName().toString());

    
public java.lang.StringcreateSystemErrLogger(java.lang.String parent)
Create a new System Error Logger.

param
parent MBean Name of the associated parent component
exception
Exception if an MBean cannot be created or registered


        // Create a new SystemErrLogger instance
        SystemErrLogger logger = new SystemErrLogger();

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        ContainerBase containerBase = getParentContainerFromParent(pname);
        containerBase.setLogger(logger);
        ObjectName oname = logger.getObjectName();
        return (oname.toString());

    
public java.lang.StringcreateSystemOutLogger(java.lang.String parent)
Create a new System Output Logger.

param
parent MBean Name of the associated parent component
exception
Exception if an MBean cannot be created or registered


        // Create a new SystemOutLogger instance
        SystemOutLogger logger = new SystemOutLogger();

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        ContainerBase containerBase = getParentContainerFromParent(pname);
        containerBase.setLogger(logger);
        ObjectName oname = logger.getObjectName();
        return (oname.toString());
        
    
public java.lang.StringcreateUserDatabaseRealm(java.lang.String parent, java.lang.String resourceName)
Create a new UserDatabaseRealm.

param
parent MBean Name of the associated parent component
param
resourceName Global JNDI resource name of the associated UserDatabase
exception
Exception if an MBean cannot be created or registered


         // Create a new UserDatabaseRealm instance
        UserDatabaseRealm realm = new UserDatabaseRealm();
        realm.setResourceName(resourceName);
        
        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        ContainerBase containerBase = getParentContainerFromParent(pname);
        // Add the new instance to its parent component
        containerBase.setRealm(realm);
        // Return the corresponding MBean name
        ObjectName oname = realm.getObjectName();
        // FIXME getObjectName() returns null
        //ObjectName oname = 
        //    MBeanUtils.createObjectName(pname.getDomain(), realm);
        if (oname != null) {
            return (oname.toString());
        } else {
            return null;
        }   

    
public java.lang.StringcreateWebappLoader(java.lang.String parent)
Create a new Web Application Loader.

param
parent MBean Name of the associated parent component
exception
Exception if an MBean cannot be created or registered


        // Create a new WebappLoader instance
        WebappLoader loader = new WebappLoader();

        // Add the new instance to its parent component
        ObjectName pname = new ObjectName(parent);
        ContainerBase containerBase = getParentContainerFromParent(pname);
        if (containerBase != null) {
            containerBase.setLoader(loader);
        } 
        // FIXME add Loader.getObjectName
        //ObjectName oname = loader.getObjectName();
        ObjectName oname = 
            MBeanUtils.createObjectName(pname.getDomain(), loader);
        return (oname.toString());
        
    
public java.lang.StringfindObjectName(java.lang.String type)
Return the managed bean definition for the specified bean type

param
type MBean type


        if (type.equals("org.apache.catalina.core.StandardContext")) {
            return "StandardContext";
        } else if (type.equals("org.apache.catalina.core.StandardDefaultContext")) {
            return "DefaultContext";
        } else if (type.equals("org.apache.catalina.core.StandardEngine")) {
            return "Engine";
        } else if (type.equals("org.apache.catalina.core.StandardHost")) {
            return "Host";
        } else {
            return null;
        }

    
private org.apache.catalina.core.ContainerBasegetParentContainerFromChild(javax.management.ObjectName oname)
Get Parent ContainerBase to add its child component from child component's ObjectName as a String

        
        String hostName = oname.getKeyProperty("host");
        String path = oname.getKeyProperty("path");
        Service service = getService(oname);
        StandardEngine engine = (StandardEngine) service.getContainer();
        if (hostName == null) {             
            // child's container is Engine
            return engine;
        } else if (path == null) {      
            // child's container is Host
            StandardHost host = (StandardHost) engine.findChild(hostName);
            return host;
        } else {                
            // child's container is Context
            StandardHost host = (StandardHost) engine.findChild(hostName);
            path = getPathStr(path);
            StandardContext context = (StandardContext) host.findChild(path);
            return context;
        }
    
private org.apache.catalina.core.ContainerBasegetParentContainerFromParent(javax.management.ObjectName pname)
Get Parent ContainerBase to add its child component from parent's ObjectName

        
        String type = pname.getKeyProperty("type");
        String j2eeType = pname.getKeyProperty("j2eeType");
        Service service = getService(pname);
        StandardEngine engine = (StandardEngine) service.getContainer();
        if ((j2eeType!=null) && (j2eeType.equals("WebModule"))) {
            String name = pname.getKeyProperty("name");
            name = name.substring(2);
            int i = name.indexOf("/");
            String hostName = name.substring(0,i);
            String path = name.substring(i);
            Host host = (Host) engine.findChild(hostName);
            String pathStr = getPathStr(path);
            StandardContext context = (StandardContext)host.findChild(pathStr);
            return context;
        } else if (type != null) {
            if (type.equals("Engine")) {
                return engine;
            } else if (type.equals("Host")) {
                String hostName = pname.getKeyProperty("host");
                StandardHost host = (StandardHost) engine.findChild(hostName);
                return host;
            }
        }
        return null;
        
    
private final java.lang.StringgetPathStr(java.lang.String t)
Little convenience method to remove redundant code when retrieving the path string

param
t path string
return
empty string if t==null || t.equals("/")

        if (t == null || t.equals("/")) {
            return "";
        }
        return t;
    
private org.apache.catalina.ServicegetService(javax.management.ObjectName oname)

    
        String domain = oname.getDomain();
        Server server = ServerFactory.getServer();
        Service[] services = server.findServices();
        StandardService service = null;
        for (int i = 0; i < services.length; i++) {
            service = (StandardService) services[i];
            if (domain.equals(service.getObjectName().getDomain())) {
                break;
            }
        }
        if (!service.getObjectName().getDomain().equals(domain)) {
            throw new Exception("Service with the domain is not found");
        }        
        return service;

    
public voidremoveConnector(java.lang.String name)
Remove an existing Connector.

param
name MBean Name of the comonent to remove
param
serviceName Service name of the connector to remove
exception
Exception if a component cannot be removed


        // Acquire a reference to the component to be removed
        ObjectName oname = new ObjectName(name);
        Server server = ServerFactory.getServer();
        Service service = getService(oname);
        String port = oname.getKeyProperty("port");
        //String address = oname.getKeyProperty("address");

        Connector conns[] = (Connector[]) service.findConnectors();

        for (int i = 0; i < conns.length; i++) {
            Class cls = conns[i].getClass();
            Method getAddrMeth = cls.getMethod("getAddress",(Class[])null);
            Object addrObj = getAddrMeth.invoke(conns[i], (Object[])null);
            String connAddress = null;
            if (addrObj != null) {
                connAddress = addrObj.toString();
            }
            Method getPortMeth = cls.getMethod("getPort",(Class[])null);
            Object portObj = getPortMeth.invoke(conns[i], (Object[])null);
            String connPort = new String();
            if (portObj != null) {
                connPort = portObj.toString();
            }
            // if (((address.equals("null")) &&
            if ((connAddress==null) && port.equals(connPort)) {
                service.removeConnector(conns[i]);
                ((CoyoteConnector)conns[i]).destroy();
                break;
            }
            // } else if (address.equals(connAddress))
            if (port.equals(connPort)) {
                // Remove this component from its parent component
                service.removeConnector(conns[i]);
                ((CoyoteConnector)conns[i]).destroy();
                break;
            }
        }

    
public voidremoveContext(java.lang.String contextName)
Remove an existing Context.

param
name MBean Name of the comonent to remove
exception
Exception if a component cannot be removed


        // Acquire a reference to the component to be removed
        ObjectName oname = new ObjectName(contextName);
        String domain = oname.getDomain();
        StandardService service = (StandardService) getService(oname);
        if (!service.getObjectName().getDomain().equals(domain)) {
            throw new Exception("Service with the domain is not found");
        }        
        Engine engine = (Engine) service.getContainer();
        String name = oname.getKeyProperty("name");
        name = name.substring(2);
        int i = name.indexOf("/");
        String hostName = name.substring(0,i);
        String path = name.substring(i);
        Host host = (Host) engine.findChild(hostName);
        String pathStr = getPathStr(path);
        Context context = (Context) host.findChild(pathStr);
        // Remove this component from its parent component
        host.removeChild(context);

    
public voidremoveHost(java.lang.String name)
Remove an existing Host.

param
name MBean Name of the comonent to remove
exception
Exception if a component cannot be removed


        // Acquire a reference to the component to be removed
        ObjectName oname = new ObjectName(name);
        String hostName = oname.getKeyProperty("host");
        Service service = getService(oname);
        Engine engine = (Engine) service.getContainer();
        Host host = (Host) engine.findChild(hostName);

        // Remove this component from its parent component
        engine.removeChild(host);

    
public voidremoveLoader(java.lang.String name)
Remove an existing Loader.

param
name MBean Name of the comonent to remove
exception
Exception if a component cannot be removed


        ObjectName oname = new ObjectName(name);
        // Acquire a reference to the component to be removed
        ContainerBase container = getParentContainerFromChild(oname);    
        container.setLoader(null);
        
    
public voidremoveLogger(java.lang.String name)
Remove an existing Logger.

param
name MBean Name of the comonent to remove
exception
Exception if a component cannot be removed


        ObjectName oname = new ObjectName(name);
        // Acquire a reference to the component to be removed
        ContainerBase container = getParentContainerFromChild(oname);      
        container.setLogger(null);
    
    
public voidremoveManager(java.lang.String name)
Remove an existing Manager.

param
name MBean Name of the comonent to remove
exception
Exception if a component cannot be removed


        ObjectName oname = new ObjectName(name);
        // Acquire a reference to the component to be removed
        ContainerBase container = getParentContainerFromChild(oname);    
        container.setManager(null);

    
public voidremoveRealm(java.lang.String name)
Remove an existing Realm.

param
name MBean Name of the comonent to remove
exception
Exception if a component cannot be removed


        ObjectName oname = new ObjectName(name);
        // Acquire a reference to the component to be removed
        ContainerBase container = getParentContainerFromChild(oname); 
        container.setRealm(null);
    
public voidremoveService(java.lang.String name)
Remove an existing Service.

param
name MBean Name of the component to remove
exception
Exception if a component cannot be removed


        // Acquire a reference to the component to be removed
        ObjectName oname = new ObjectName(name);
        String serviceName = oname.getKeyProperty("serviceName");
        Server server = ServerFactory.getServer();
        Service service = server.findService(serviceName);

        // Remove this component from its parent component
        server.removeService(service);

    
public voidremoveValve(java.lang.String name)
Remove an existing Valve.

param
name MBean Name of the comonent to remove
exception
Exception if a component cannot be removed


        // Acquire a reference to the component to be removed
        ObjectName oname = new ObjectName(name);
        ContainerBase container = getParentContainerFromChild(oname);
        String sequence = oname.getKeyProperty("seq");
        Valve[] valves = (Valve[])container.getValves();
        for (int i = 0; i < valves.length; i++) {
            ObjectName voname = ((ValveBase) valves[i]).getObjectName();
            if (voname.equals(oname)) {
                container.removeValve(valves[i]);
            }
        }