Remove ServerLifecycleListener
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 8 Feb 2011 14:32:38 +0000 (14:32 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 8 Feb 2011 14:32:38 +0000 (14:32 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1068420 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/mbeans/ServerLifecycleListener.java [deleted file]
webapps/docs/changelog.xml
webapps/docs/config/listeners.xml

diff --git a/java/org/apache/catalina/mbeans/ServerLifecycleListener.java b/java/org/apache/catalina/mbeans/ServerLifecycleListener.java
deleted file mode 100644 (file)
index 94e433c..0000000
+++ /dev/null
@@ -1,1202 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.catalina.mbeans;
-
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
-import javax.management.MBeanException;
-
-import org.apache.catalina.Container;
-import org.apache.catalina.ContainerEvent;
-import org.apache.catalina.ContainerListener;
-import org.apache.catalina.Context;
-import org.apache.catalina.Engine;
-import org.apache.catalina.Globals;
-import org.apache.catalina.Host;
-import org.apache.catalina.Lifecycle;
-import org.apache.catalina.LifecycleEvent;
-import org.apache.catalina.LifecycleListener;
-import org.apache.catalina.Loader;
-import org.apache.catalina.Manager;
-import org.apache.catalina.Realm;
-import org.apache.catalina.Server;
-import org.apache.catalina.Service;
-import org.apache.catalina.connector.Connector;
-import org.apache.catalina.core.StandardContext;
-import org.apache.catalina.core.StandardEngine;
-import org.apache.catalina.core.StandardHost;
-import org.apache.catalina.core.StandardServer;
-import org.apache.catalina.core.StandardService;
-import org.apache.catalina.deploy.ContextEnvironment;
-import org.apache.catalina.deploy.ContextResource;
-import org.apache.catalina.deploy.ContextResourceLink;
-import org.apache.catalina.deploy.NamingResources;
-import org.apache.juli.logging.Log;
-import org.apache.juli.logging.LogFactory;
-import org.apache.tomcat.util.ExceptionUtils;
-
-
-/**
- * Implementation of <code>LifecycleListener</code> that
- * instantiates the set of MBeans associated with the components of a
- * running instance of Catalina.
- *
- * @author Craig R. McClanahan
- * @author Amy Roh
- * @version $Id$
- * 
- * TODO: Is this still required? Possibly for resources. Need to check.
- */
-public class ServerLifecycleListener
-    implements ContainerListener, LifecycleListener, PropertyChangeListener {
-
-    private static final Log log = LogFactory.getLog(ServerLifecycleListener.class);
-
-
-    // ------------------------------------------------------------- Properties
-
-
-    /**
-     * Semicolon separated list of paths containing MBean descriptor resources.
-     */
-    protected String descriptors = null;
-
-    public String getDescriptors() {
-        return (this.descriptors);
-    }
-
-    public void setDescriptors(String descriptors) {
-        this.descriptors = descriptors;
-    }
-
-
-    // ---------------------------------------------- ContainerListener Methods
-
-
-    /**
-     * Handle a <code>ContainerEvent</code> from one of the Containers we are
-     * interested in.
-     *
-     * @param event The event that has occurred
-     */
-    public void containerEvent(ContainerEvent event) {
-
-        try {
-            String type = event.getType();
-            if (Container.ADD_CHILD_EVENT.equals(type)) {
-                processContainerAddChild(event.getContainer(),
-                                         (Container) event.getData());
-            } else if (Container.REMOVE_CHILD_EVENT.equals(type)) {
-                processContainerRemoveChild(event.getContainer(),
-                                            (Container) event.getData());
-            }
-        } catch (Exception e) {
-            log.error("Exception processing event " + event, e);
-        }
-
-    }
-
-
-    // ---------------------------------------------- LifecycleListener Methods
-
-
-    /**
-     * Primary entry point for startup and shutdown events.
-     *
-     * @param event The event that has occurred
-     */
-    public void lifecycleEvent(LifecycleEvent event) {
-
-        Lifecycle lifecycle = event.getLifecycle();
-        if (Lifecycle.START_EVENT.equals(event.getType())) {
-
-            try {
-
-                if (lifecycle instanceof Server) {
-                    MBeanFactory factory = new MBeanFactory();
-                    factory.setContainer(lifecycle);
-                    createMBeans(factory);
-                    createMBeans((Server) lifecycle);
-                }
-
-                if( lifecycle instanceof Service ) {
-                    MBeanFactory factory = new MBeanFactory();
-                    factory.setContainer(lifecycle);
-                    createMBeans(factory);
-                    createMBeans((Service)lifecycle);
-                }
-
-            } catch (MBeanException t) {
-
-                Exception e = t.getTargetException();
-                if (e == null)
-                    e = t;
-                log.error("createMBeans: MBeanException", e);
-
-            } catch (Throwable t) {
-                ExceptionUtils.handleThrowable(t);
-                log.error("createMBeans: Throwable", t);
-            }
-
-             /*
-            // Ignore events from StandardContext objects to avoid
-            // reregistering the context
-            if (lifecycle instanceof StandardContext)
-                return;
-            createMBeans();
-            */
-
-        } else if (Lifecycle.AFTER_STOP_EVENT.equals(event.getType())) {
-            try {
-                if (lifecycle instanceof Server) {
-                    destroyMBeans((Server)lifecycle);
-                }
-                if (lifecycle instanceof Service) {
-                    destroyMBeans((Service)lifecycle);
-                }
-            } catch (MBeanException t) {
-
-                Exception e = t.getTargetException();
-                if (e == null) {
-                    e = t;
-                }
-                log.error("destroyMBeans: MBeanException", e);
-
-            } catch (Throwable t) {
-                ExceptionUtils.handleThrowable(t);
-                log.error("destroyMBeans: Throwable", t);
-            }
-            // FIXME: RMI adaptor should be stopped; however, this is
-            // undocumented in MX4J, and reports exist in the MX4J bug DB that
-            // this doesn't work
-
-        }
-
-        if ((Context.RELOAD_EVENT.equals(event.getType()))
-            || (Lifecycle.START_EVENT.equals(event.getType()))) {
-
-            // Give context a new handle to the MBean server if the
-            // context has been reloaded since reloading causes the
-            // context to lose its previous handle to the server
-            if (lifecycle instanceof StandardContext) {
-                // If the context is privileged, give a reference to it
-                // in a servlet context attribute
-                StandardContext context = (StandardContext)lifecycle;
-                if (context.getPrivileged()) {
-                    context.getServletContext().setAttribute
-                        (Globals.MBEAN_REGISTRY_ATTR,
-                         MBeanUtils.createRegistry());
-                    context.getServletContext().setAttribute
-                        (Globals.MBEAN_SERVER_ATTR,
-                         MBeanUtils.createServer());
-                }
-            }
-
-        }
-
-    }
-
-
-    // ----------------------------------------- PropertyChangeListener Methods
-
-
-    /**
-     * Handle a <code>PropertyChangeEvent</code> from one of the Containers
-     * we are interested in.
-     *
-     * @param event The event that has occurred
-     */
-    public void propertyChange(PropertyChangeEvent event) {
-
-        if (event.getSource() instanceof Container) {
-            try {
-                processContainerPropertyChange((Container) event.getSource(),
-                                               event.getPropertyName(),
-                                               event.getOldValue(),
-                                               event.getNewValue());
-            } catch (Exception e) {
-                log.error("Exception handling Container property change", e);
-            }
-        } else if (event.getSource() instanceof NamingResources) {
-            try {
-                processNamingResourcesPropertyChange
-                    ((NamingResources) event.getSource(),
-                     event.getPropertyName(),
-                     event.getOldValue(),
-                     event.getNewValue());
-            } catch (Exception e) {
-                log.error("Exception handling NamingResources property change", e);
-            }
-        } else if (event.getSource() instanceof Server) {
-            try {
-                processServerPropertyChange((Server) event.getSource(),
-                                            event.getPropertyName(),
-                                            event.getOldValue(),
-                                            event.getNewValue());
-            } catch (Exception e) {
-                log.error("Exception handing Server property change", e);
-            }
-        } else if (event.getSource() instanceof Service) {
-            try {
-                processServicePropertyChange((Service) event.getSource(),
-                                             event.getPropertyName(),
-                                             event.getOldValue(),
-                                             event.getNewValue());
-            } catch (Exception e) {
-                log.error("Exception handing Service property change", e);
-            }
-        }
-
-    }
-
-
-    // ------------------------------------------------------ Protected Methods
-
-
-    /**
-     * Create the MBeans for the specified Connector and its nested components.
-     *
-     * @param connector Connector for which to create MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean creation
-     */
-    protected void createMBeans(Connector connector) throws Exception {
-
-        // Create the MBean for the Connector itself
-//        if (log.isDebugEnabled())
-//            log.debug("Creating MBean for Connector " + connector);
-//        MBeanUtils.createMBean(connector);
-
-    }
-
-
-    /**
-     * Create the MBeans for the specified Context and its nested components.
-     *
-     * @param context Context for which to create MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean creation
-     */
-    protected void createMBeans(Context context) throws Exception {
-
-        // Create the MBean for the Context itself
-//        if (log.isDebugEnabled())
-//            log.debug("Creating MBean for Context " + context);
-//        MBeanUtils.createMBean(context);
-        context.addContainerListener(this);
-        if (context instanceof StandardContext) {
-            ((StandardContext) context).addPropertyChangeListener(this);
-            context.addLifecycleListener(this);
-        }
-
-        // If the context is privileged, give a reference to it
-        // in a servlet context attribute
-        if (context.getPrivileged()) {
-            context.getServletContext().setAttribute
-                (Globals.MBEAN_REGISTRY_ATTR,
-                 MBeanUtils.createRegistry());
-            context.getServletContext().setAttribute
-                (Globals.MBEAN_SERVER_ATTR,
-                 MBeanUtils.createServer());
-        }
-
-        // Create the MBeans for the associated nested components
-        Loader cLoader = context.getLoader();
-        if (cLoader != null) {
-            if (log.isDebugEnabled())
-                log.debug("Creating MBean for Loader " + cLoader);
-            //MBeanUtils.createMBean(cLoader);
-        }
-        Manager cManager = context.getManager();
-        if (cManager != null) {
-            if (log.isDebugEnabled())
-                log.debug("Creating MBean for Manager " + cManager);
-            //MBeanUtils.createMBean(cManager);
-        }
-        Realm hRealm = context.getParent().getRealm();
-        Realm cRealm = context.getRealm();
-        if ((cRealm != null) && (cRealm != hRealm)) {
-            if (log.isDebugEnabled())
-                log.debug("Creating MBean for Realm " + cRealm);
-            //MBeanUtils.createMBean(cRealm);
-        }
-
-        // Create the MBeans for the NamingResources (if any)
-        NamingResources resources = context.getNamingResources();
-        createMBeans(resources);
-
-    }
-
-
-    /**
-     * Create the MBeans for the specified ContextEnvironment entry.
-     *
-     * @param environment ContextEnvironment for which to create MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean creation
-     */
-    protected void createMBeans(ContextEnvironment environment)
-        throws Exception {
-
-        // Create the MBean for the ContextEnvironment itself
-        if (log.isDebugEnabled()) {
-            log.debug("Creating MBean for ContextEnvironment " + environment);
-        }
-        MBeanUtils.createMBean(environment);
-
-    }
-
-
-    /**
-     * Create the MBeans for the specified ContextResource entry.
-     *
-     * @param resource ContextResource for which to create MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean creation
-     */
-    protected void createMBeans(ContextResource resource)
-        throws Exception {
-
-        // Create the MBean for the ContextResource itself
-        if (log.isDebugEnabled()) {
-            log.debug("Creating MBean for ContextResource " + resource);
-        }
-        MBeanUtils.createMBean(resource);
-
-    }
-
-
-    /**
-     * Create the MBeans for the specified ContextResourceLink entry.
-     *
-     * @param resourceLink ContextResourceLink for which to create MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean creation
-     */
-    protected void createMBeans(ContextResourceLink resourceLink)
-        throws Exception {
-
-        // Create the MBean for the ContextResourceLink itself
-        if (log.isDebugEnabled()) {
-            log.debug("Creating MBean for ContextResourceLink " + resourceLink);
-        }
-        MBeanUtils.createMBean(resourceLink);
-
-    }
-
-
-    /**
-     * Create the MBeans for the specified Engine and its nested components.
-     *
-     * @param engine Engine for which to create MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean creation
-     */
-    protected void createMBeans(Engine engine) throws Exception {
-
-        // Create the MBean for the Engine itself
-        if (log.isDebugEnabled()) {
-            log.debug("Creating MBean for Engine " + engine);
-        }
-        //MBeanUtils.createMBean(engine);
-        engine.addContainerListener(this);
-        if (engine instanceof StandardEngine) {
-            ((StandardEngine) engine).addPropertyChangeListener(this);
-        }
-
-        // Create the MBeans for the associated nested components
-        Realm eRealm = engine.getRealm();
-        if (eRealm != null) {
-            if (log.isDebugEnabled())
-                log.debug("Creating MBean for Realm " + eRealm);
-            //MBeanUtils.createMBean(eRealm);
-        }
-
-        // Create the MBeans for each child Host
-        Container hosts[] = engine.findChildren();
-        for (int j = 0; j < hosts.length; j++) {
-            createMBeans((Host) hosts[j]);
-        }
-
-    }
-
-
-    /**
-     * Create the MBeans for the specified Host and its nested components.
-     *
-     * @param host Host for which to create MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean creation
-     */
-    protected void createMBeans(Host host) throws Exception {
-
-        // Create the MBean for the Host itself
-        if (log.isDebugEnabled()) {
-            log.debug("Creating MBean for Host " + host);
-        }
-        //MBeanUtils.createMBean(host);
-        host.addContainerListener(this);
-        if (host instanceof StandardHost) {
-            ((StandardHost) host).addPropertyChangeListener(this);
-        }
-
-        // Create the MBeans for the associated nested components
-        Realm eRealm = host.getParent().getRealm();
-        Realm hRealm = host.getRealm();
-        if ((hRealm != null) && (hRealm != eRealm)) {
-            if (log.isDebugEnabled())
-                log.debug("Creating MBean for Realm " + hRealm);
-            //MBeanUtils.createMBean(hRealm);
-        }
-
-        // Create the MBeans for each child Context
-        Container contexts[] = host.findChildren();
-        for (int k = 0; k < contexts.length; k++) {
-            createMBeans((Context) contexts[k]);
-        }
-
-    }
-
-
-    /**
-     * Create the MBeans for MBeanFactory.
-     *
-     * @param factory MBeanFactory for which to create MBean
-     *
-     * @exception Exception if an exception is thrown during MBean creation
-     */
-    protected void createMBeans(MBeanFactory factory) throws Exception {
-
-        // Create the MBean for the MBeanFactory
-        if (log.isDebugEnabled())
-            log.debug("Creating MBean for MBeanFactory " + factory);
-        MBeanUtils.createMBean(factory);
-
-    }
-
-
-    /**
-     * Create the MBeans for the specified NamingResources and its
-     * nested components.
-     *
-     * @param resources NamingResources for which to create MBeans
-     */
-    protected void createMBeans(NamingResources resources) throws Exception {
-
-        // Create the MBean for the NamingResources itself
-        if (log.isDebugEnabled()) {
-            log.debug("Creating MBean for NamingResources " + resources);
-        }
-        MBeanUtils.createMBean(resources);
-        resources.addPropertyChangeListener(this);
-
-        // Create the MBeans for each child environment entry
-        ContextEnvironment environments[] = resources.findEnvironments();
-        for (int i = 0; i < environments.length; i++) {
-            createMBeans(environments[i]);
-        }
-
-        // Create the MBeans for each child resource entry
-        ContextResource cresources[] = resources.findResources();
-        for (int i = 0; i < cresources.length; i++) {
-            createMBeans(cresources[i]);
-        }
-
-        // Create the MBeans for each child resource link entry
-        ContextResourceLink cresourcelinks[] = resources.findResourceLinks();
-        for (int i = 0; i < cresourcelinks.length; i++) {
-            createMBeans(cresourcelinks[i]);
-        }
-
-    }
-
-
-    /**
-     * Create the MBeans for the specified Server and its nested components.
-     *
-     * @param server Server for which to create MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean creation
-     */
-    protected void createMBeans(Server server) throws Exception {
-
-        // Create the MBean for the Server itself
-        if (log.isDebugEnabled())
-            log.debug("Creating MBean for Server " + server);
-        //MBeanUtils.createMBean(server);
-        if (server instanceof StandardServer) {
-            ((StandardServer) server).addPropertyChangeListener(this);
-        }
-
-        // Create the MBeans for the global NamingResources (if any)
-        NamingResources resources = server.getGlobalNamingResources();
-        if (resources != null) {
-            createMBeans(resources);
-        }
-
-        // Create the MBeans for each child Service
-        Service services[] = server.findServices();
-        for (int i = 0; i < services.length; i++) {
-            // FIXME - Warp object hierarchy not currently supported
-            if (services[i].getContainer().getClass().getName().equals
-                ("org.apache.catalina.connector.warp.WarpEngine")) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Skipping MBean for Service " + services[i]);
-                }
-                continue;
-            }
-            createMBeans(services[i]);
-        }
-
-    }
-
-
-    /**
-     * Create the MBeans for the specified Service and its nested components.
-     *
-     * @param service Service for which to create MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean creation
-     */
-    protected void createMBeans(Service service) throws Exception {
-
-        if (service instanceof StandardService) {
-            ((StandardService) service).addPropertyChangeListener(this);
-        }
-
-        // Create the MBeans for the corresponding Connectors
-        Connector connectors[] = service.findConnectors();
-        for (int j = 0; j < connectors.length; j++) {
-            createMBeans(connectors[j]);
-        }
-
-        // Create the MBean for the associated Engine and friends
-        Engine engine = (Engine) service.getContainer();
-        if (engine != null) {
-            createMBeans(engine);
-        }
-
-    }
-
-
-    /**
-     * Deregister the MBeans for the specified Connector and its nested
-     * components.
-     *
-     * @param connector Connector for which to deregister MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean destruction
-     */
-    protected void destroyMBeans(Connector connector, Service service)
-        throws Exception {
-
-        // deregister the MBean for the Connector itself
-        if (log.isDebugEnabled())
-            log.debug("Destroying MBean for Connector " + connector);
-        MBeanUtils.destroyMBean(connector, service);
-
-    }
-
-
-    /**
-     * Deregister the MBeans for the specified Context and its nested
-     * components.
-     *
-     * @param context Context for which to deregister MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean destruction
-     */
-    protected void destroyMBeans(Context context) throws Exception {
-
-        // Deregister ourselves as a ContainerListener
-        context.removeContainerListener(this);
-
-        // Destroy the MBeans for the associated nested components
-        Realm hRealm = context.getParent().getRealm();
-        Realm cRealm = context.getRealm();
-        if ((cRealm != null) && (cRealm != hRealm)) {
-            if (log.isDebugEnabled())
-                log.debug("Destroying MBean for Realm " + cRealm);
-            //MBeanUtils.destroyMBean(cRealm);
-        }
-        Manager cManager = context.getManager();
-        if (cManager != null) {
-            if (log.isDebugEnabled())
-                log.debug("Destroying MBean for Manager " + cManager);
-            //MBeanUtils.destroyMBean(cManager);
-        }
-        Loader cLoader = context.getLoader();
-        if (cLoader != null) {
-            if (log.isDebugEnabled())
-                log.debug("Destroying MBean for Loader " + cLoader);
-            //MBeanUtils.destroyMBean(cLoader);
-        }
-
-        // Destroy the MBeans for the NamingResources (if any)
-        NamingResources resources = context.getNamingResources();
-        if (resources != null) {
-            destroyMBeans(resources);
-        }
-
-        // deregister the MBean for the Context itself
-        if (log.isDebugEnabled())
-            log.debug("Destroying MBean for Context " + context);
-        MBeanUtils.destroyMBean(context);
-        if (context instanceof StandardContext) {
-            ((StandardContext) context).
-                removePropertyChangeListener(this);
-        }
-
-    }
-
-
-    /**
-     * Deregister the MBeans for the specified ContextEnvironment entry.
-     *
-     * @param environment ContextEnvironment for which to destroy MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean destruction
-     */
-    protected void destroyMBeans(ContextEnvironment environment)
-        throws Exception {
-
-        // Destroy the MBean for the ContextEnvironment itself
-        if (log.isDebugEnabled()) {
-            log.debug("Destroying MBean for ContextEnvironment " + environment);
-        }
-        MBeanUtils.destroyMBean(environment);
-
-    }
-
-
-    /**
-     * Deregister the MBeans for the specified ContextResource entry.
-     *
-     * @param resource ContextResource for which to destroy MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean destruction
-     */
-    protected void destroyMBeans(ContextResource resource)
-        throws Exception {
-
-        // Destroy the MBean for the ContextResource itself
-        if (log.isDebugEnabled()) {
-            log.debug("Destroying MBean for ContextResource " + resource);
-        }
-        MBeanUtils.destroyMBean(resource);
-
-    }
-
-
-    /**
-     * Deregister the MBeans for the specified ContextResourceLink entry.
-     *
-     * @param resourceLink ContextResourceLink for which to destroy MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean destruction
-     */
-    protected void destroyMBeans(ContextResourceLink resourceLink)
-        throws Exception {
-
-        // Destroy the MBean for the ContextResourceLink itself
-        if (log.isDebugEnabled()) {
-            log.debug("Destroying MBean for ContextResourceLink " + resourceLink);
-        }
-        MBeanUtils.destroyMBean(resourceLink);
-
-    }
-
-
-    /**
-     * Deregister the MBeans for the specified Engine and its nested
-     * components.
-     *
-     * @param engine Engine for which to destroy MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean destruction
-     */
-    protected void destroyMBeans(Engine engine) throws Exception {
-
-        // Deregister ourselves as a ContainerListener
-        engine.removeContainerListener(this);
-
-        // Deregister the MBeans for each child Host
-        Container hosts[] = engine.findChildren();
-        for (int k = 0; k < hosts.length; k++) {
-            destroyMBeans((Host) hosts[k]);
-        }
-
-        // Deregister the MBeans for the associated nested components
-        Realm eRealm = engine.getRealm();
-        if (eRealm != null) {
-            if (log.isDebugEnabled())
-                log.debug("Destroying MBean for Realm " + eRealm);
-            //MBeanUtils.destroyMBean(eRealm);
-        }
-
-        // Deregister the MBean for the Engine itself
-        if (log.isDebugEnabled()) {
-            log.debug("Destroying MBean for Engine " + engine);
-        }
-        MBeanUtils.destroyMBean(engine);
-
-    }
-
-
-    /**
-     * Deregister the MBeans for the specified Host and its nested components.
-     *
-     * @param host Host for which to destroy MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean destruction
-     */
-    protected void destroyMBeans(Host host) throws Exception {
-
-        // Deregister ourselves as a ContainerListener
-        host.removeContainerListener(this);
-
-        // Deregister the MBeans for each child Context
-        Container contexts[] = host.findChildren();
-        for (int k = 0; k < contexts.length; k++) {
-            destroyMBeans((Context) contexts[k]);
-        }
-
-
-        // Deregister the MBeans for the associated nested components
-        Realm eRealm = host.getParent().getRealm();
-        Realm hRealm = host.getRealm();
-        if ((hRealm != null) && (hRealm != eRealm)) {
-            if (log.isDebugEnabled())
-                log.debug("Destroying MBean for Realm " + hRealm);
-            //MBeanUtils.destroyMBean(hRealm);
-        }
-
-        // Deregister the MBean for the Host itself
-        if (log.isDebugEnabled()) {
-            log.debug("Destroying MBean for Host " + host);
-        }
-        MBeanUtils.destroyMBean(host);
-
-    }
-
-
-    /**
-     * Deregister the MBeans for the specified NamingResources and its
-     * nested components.
-     *
-     * @param resources NamingResources for which to destroy MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean destruction
-     */
-    protected void destroyMBeans(NamingResources resources) throws Exception {
-
-        // Destroy the MBeans for each child resource entry
-        ContextResource cresources[] = resources.findResources();
-        for (int i = 0; i < cresources.length; i++) {
-            destroyMBeans(cresources[i]);
-        }
-
-        // Destroy the MBeans for each child resource link entry
-        ContextResourceLink cresourcelinks[] = resources.findResourceLinks();
-        for (int i = 0; i < cresourcelinks.length; i++) {
-            destroyMBeans(cresourcelinks[i]);
-        }
-
-        // Destroy the MBeans for each child environment entry
-        ContextEnvironment environments[] = resources.findEnvironments();
-        for (int i = 0; i < environments.length; i++) {
-            destroyMBeans(environments[i]);
-        }
-
-        // Destroy the MBean for the NamingResources itself
-        if (log.isDebugEnabled()) {
-            log.debug("Destroying MBean for NamingResources " + resources);
-        }
-        MBeanUtils.destroyMBean(resources);
-        resources.removePropertyChangeListener(this);
-
-    }
-
-
-    /**
-     * Deregister the MBeans for the specified Server and its related
-     * components.
-     *
-     * @param server Server for which to destroy MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean destruction
-     */
-    protected void destroyMBeans(Server server) throws Exception {
-
-        // Destroy the MBeans for the global NamingResources (if any)
-        NamingResources resources = server.getGlobalNamingResources();
-        if (resources != null) {
-            destroyMBeans(resources);
-        }
-
-        // Destroy the MBeans for each child Service
-        Service services[] = server.findServices();
-        for (int i = 0; i < services.length; i++) {
-            destroyMBeans(services[i]);
-        }
-
-        // Destroy the MBean for the Server itself
-        if (log.isDebugEnabled()) {
-            log.debug("Destroying MBean for Server " + server);
-        }
-        MBeanUtils.destroyMBean(server);
-        if (server instanceof StandardServer) {
-            ((StandardServer) server).removePropertyChangeListener(this);
-        }
-
-    }
-
-
-    /**
-     * Deregister the MBeans for the specified Service and its nested
-     * components.
-     *
-     * @param service Service for which to destroy MBeans
-     *
-     * @exception Exception if an exception is thrown during MBean destruction
-     */
-    protected void destroyMBeans(Service service) throws Exception {
-
-        // Deregister the MBeans for the associated Engine
-        Engine engine = (Engine) service.getContainer();
-        if (engine != null) {
-            destroyMBeans(engine);
-        }
-
-        // Deregister the MBeans for the corresponding Connectors
-        Connector connectors[] = service.findConnectors();
-        for (int j = 0; j < connectors.length; j++) {
-            destroyMBeans(connectors[j], service);
-        }
-
-        if (service instanceof StandardService) {
-            ((StandardService) service).removePropertyChangeListener(this);
-        }
-
-    }
-
-
-    /**
-     * Process the addition of a new child Container to a parent Container.
-     *
-     * @param parent Parent container
-     * @param child Child container
-     */
-    protected void processContainerAddChild(Container parent,
-                                            Container child) {
-
-        if (log.isDebugEnabled())
-            log.debug("Process addChild[parent=" + parent + ",child=" + child + "]");
-
-        try {
-            if (child instanceof Context) {
-                createMBeans((Context) child);
-            } else if (child instanceof Engine) {
-                createMBeans((Engine) child);
-            } else if (child instanceof Host) {
-                createMBeans((Host) child);
-            }
-        } catch (MBeanException t) {
-            Exception e = t.getTargetException();
-            if (e == null)
-                e = t;
-            log.error("processContainerAddChild: MBeanException", e);
-        } catch (Throwable t) {
-            ExceptionUtils.handleThrowable(t);
-            log.error("processContainerAddChild: Throwable", t);
-        }
-
-    }
-
-
-    /**
-     * Process a property change event on a Container.
-     *
-     * @param container The container on which this event occurred
-     * @param propertyName The name of the property that changed
-     * @param oldValue The previous value (may be <code>null</code>)
-     * @param newValue The new value (may be <code>null</code>)
-     *
-     * @exception Exception if an exception is thrown
-     */
-    protected void processContainerPropertyChange(Container container,
-                                                  String propertyName,
-                                                  Object oldValue,
-                                                  Object newValue)
-        throws Exception {
-
-        if (log.isTraceEnabled()) {
-            log.trace("propertyChange[container=" + container +
-                ",propertyName=" + propertyName +
-                ",oldValue=" + oldValue +
-                ",newValue=" + newValue + "]");
-        }
-        if ("loader".equals(propertyName)) {
-            if (oldValue != null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Removing MBean for Loader " + oldValue);
-                }
-                MBeanUtils.destroyMBean((Loader) oldValue);
-            }
-            if (newValue != null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Creating MBean for Loader " + newValue);
-                }
-                MBeanUtils.createMBean((Loader) newValue);
-            }
-        } else if ("logger".equals(propertyName)) {
-            if (oldValue != null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Removing MBean for Logger " + oldValue);
-                }
-               // MBeanUtils.destroyMBean((Logger) oldValue);
-            }
-            if (newValue != null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Creating MBean for Logger " + newValue);
-                }
-                //MBeanUtils.createMBean((Logger) newValue);
-            }
-        } else if ("manager".equals(propertyName)) {
-            if (oldValue != null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Removing MBean for Manager " + oldValue);
-                }
-                //MBeanUtils.destroyMBean((Manager) oldValue);
-            }
-            if (newValue != null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Creating MBean for Manager " + newValue);
-                }
-                //MBeanUtils.createMBean((Manager) newValue);
-            }
-        } else if ("realm".equals(propertyName)) {
-            if (oldValue != null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Removing MBean for Realm " + oldValue);
-                }
-                MBeanUtils.destroyMBean((Realm) oldValue);
-            }
-            if (newValue != null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Creating MBean for Realm " + newValue);
-                }
-                //MBeanUtils.createMBean((Realm) newValue);
-            }
-        } else if ("service".equals(propertyName)) {
-            if (oldValue != null) {
-                destroyMBeans((Service) oldValue);
-            }
-            if (newValue != null) {
-                createMBeans((Service) newValue);
-            }
-        }
-
-    }
-
-
-    /**
-     * Process the removal of a child Container from a parent Container.
-     *
-     * @param parent Parent container
-     * @param child Child container
-     */
-    protected void processContainerRemoveChild(Container parent,
-                                               Container child) {
-
-        if (log.isDebugEnabled())
-            log.debug("Process removeChild[parent=" + parent + ",child=" +
-                child + "]");
-
-        try {
-            if (child instanceof Context) {
-                Context context = (Context) child;
-                if (context.getPrivileged()) {
-                    context.getServletContext().removeAttribute
-                        (Globals.MBEAN_REGISTRY_ATTR);
-                    context.getServletContext().removeAttribute
-                        (Globals.MBEAN_SERVER_ATTR);
-                }
-                if (log.isDebugEnabled())
-                    log.debug("  Removing MBean for Context " + context);
-                destroyMBeans(context);
-                if (context instanceof StandardContext) {
-                    ((StandardContext) context).
-                        removePropertyChangeListener(this);
-                }
-            } else if (child instanceof Host) {
-                Host host = (Host) child;
-                destroyMBeans(host);
-                if (host instanceof StandardHost) {
-                    ((StandardHost) host).
-                        removePropertyChangeListener(this);
-                }
-            }
-        } catch (MBeanException t) {
-            Exception e = t.getTargetException();
-            if (e == null)
-                e = t;
-            log.error("processContainerRemoveChild: MBeanException", e);
-        } catch (Throwable t) {
-            ExceptionUtils.handleThrowable(t);
-            log.error("processContainerRemoveChild: Throwable", t);
-        }
-
-    }
-
-
-    /**
-     * Process a property change event on a NamingResources.
-     *
-     * @param resources The global naming resources on which this
-     *  event occurred
-     * @param propertyName The name of the property that changed
-     * @param oldValue The previous value (may be <code>null</code>)
-     * @param newValue The new value (may be <code>null</code>)
-     *
-     * @exception Exception if an exception is thrown
-     */
-    protected void processNamingResourcesPropertyChange
-        (NamingResources resources, String propertyName,
-         Object oldValue, Object newValue)
-        throws Exception {
-
-        if (log.isTraceEnabled()) {
-            log.trace("propertyChange[namingResources=" + resources +
-                ",propertyName=" + propertyName +
-                ",oldValue=" + oldValue +
-                ",newValue=" + newValue + "]");
-        }
-
-        // FIXME - Add other resource types when supported by admin tool
-        if ("environment".equals(propertyName)) {
-            if (oldValue != null) {
-                destroyMBeans((ContextEnvironment) oldValue);
-            }
-            if (newValue != null) {
-                createMBeans((ContextEnvironment) newValue);
-            }
-        } else if ("resource".equals(propertyName)) {
-            if (oldValue != null) {
-                destroyMBeans((ContextResource) oldValue);
-            }
-            if (newValue != null) {
-                createMBeans((ContextResource) newValue);
-            }
-        } else if ("resourceLink".equals(propertyName)) {
-            if (oldValue != null) {
-                destroyMBeans((ContextResourceLink) oldValue);
-            }
-            if (newValue != null) {
-                createMBeans((ContextResourceLink) newValue);
-            }
-        }
-
-    }
-
-
-    /**
-     * Process a property change event on a Server.
-     *
-     * @param server The server on which this event occurred
-     * @param propertyName The name of the property that changed
-     * @param oldValue The previous value (may be <code>null</code>)
-     * @param newValue The new value (may be <code>null</code>)
-     *
-     * @exception Exception if an exception is thrown
-     */
-    protected void processServerPropertyChange(Server server,
-                                               String propertyName,
-                                               Object oldValue,
-                                               Object newValue)
-        throws Exception {
-
-        if (log.isTraceEnabled()) {
-            log.trace("propertyChange[server=" + server +
-                ",propertyName=" + propertyName +
-                ",oldValue=" + oldValue +
-                ",newValue=" + newValue + "]");
-        }
-        if ("globalNamingResources".equals(propertyName)) {
-            if (oldValue != null) {
-                destroyMBeans((NamingResources) oldValue);
-            }
-            if (newValue != null) {
-                createMBeans((NamingResources) newValue);
-            }
-        } else if ("service".equals(propertyName)) {
-            if (oldValue != null) {
-                destroyMBeans((Service) oldValue);
-            }
-            if (newValue != null) {
-                createMBeans((Service) newValue);
-            }
-        }
-
-    }
-
-
-    /**
-     * Process a property change event on a Service.
-     *
-     * @param service The service on which this event occurred
-     * @param propertyName The name of the property that changed
-     * @param oldValue The previous value (may be <code>null</code>)
-     * @param newValue The new value (may be <code>null</code>)
-     *
-     * @exception Exception if an exception is thrown
-     */
-    protected void processServicePropertyChange(Service service,
-                                                String propertyName,
-                                                Object oldValue,
-                                                Object newValue)
-        throws Exception {
-
-        if (log.isTraceEnabled()) {
-            log.trace("propertyChange[service=" + service +
-                ",propertyName=" + propertyName +
-                ",oldValue=" + oldValue +
-                ",newValue=" + newValue + "]");
-        }
-        if ("connector".equals(propertyName)) {
-            if (oldValue != null) {
-                destroyMBeans((Connector) oldValue, service);
-            }
-            if (newValue != null) {
-                createMBeans((Connector) newValue);
-            }
-        } else if ("container".equals(propertyName)) {
-            if (oldValue != null) {
-                destroyMBeans((Engine) oldValue);
-            }
-            if (newValue != null) {
-                createMBeans((Engine) newValue);
-            }
-        }
-
-    }
-
-
-}
index ffe515d..ea1e1f9 100644 (file)
         Restore access to Environments, Resources and ResourceLinks via JMX
         which was lost in early 7.0.x re-factoring. (markt)
       </fix>
+      <update>
+        Remove ServerLifeListener. This was already removed from server.xml and
+        with the Lifecycle re-factoring is no longer required. (markt)
+      </update>
     </changelog>
   </subsection>
   <subsection name="Coyote">
index f47748e..ba3d258 100644 (file)
     <p>No additional attributes are supported by the <strong>Jasper Listener
     </strong>.</p>
 
-    <h3>Server Lifecycle Listener
-    (org.apache.catalina.mbeans.ServerLifecycleListener)</h3>
-
-    <p>The <strong>Server Lifecycle Listener</strong> initializes the
-    MBeanServer for the MBeans that may be used to manage Tomcat via JMX.
-    Without this listener, none of the Tomcat MBeans will be available.</p>
-
-    <p>This listener must only be nested within <a href="server.html">Server</a>
-    elements.</p>
-
-    <p>No additional attributes are supported by the <strong>Server Lifecycle
-    Listener</strong>.</p>
-
     <h3>Global Resources Lifecycle Listener
     (org.apache.catalina.mbeans.GlobalResourcesLifecycleListener)</h3>