amyroh      2002/09/09 16:39:03

  Modified:    catalina/src/share/org/apache/catalina DefaultContext.java
                        Engine.java Host.java
               catalina/src/share/org/apache/catalina/mbeans
                        MBeanFactory.java ServerLifecycleListener.java
                        mbeans-descriptors.xml
  Added:       catalina/src/share/org/apache/catalina/mbeans
                        DefaultContextMBean.java
  Log:
  Add DefaultContext MBean and mofify ServerLifecycleListener to create MBeans for 
DefaultContext and its components.
  
  Revision  Changes    Path
  1.4       +11 -4     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/DefaultContext.java
  
  Index: DefaultContext.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/DefaultContext.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DefaultContext.java       30 Aug 2002 05:41:13 -0000      1.3
  +++ DefaultContext.java       9 Sep 2002 23:39:03 -0000       1.4
  @@ -70,6 +70,7 @@
   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.catalina.deploy.ResourceParams;
   
   
  @@ -350,6 +351,12 @@
        * @param listener Java class name of a ContainerListener class
        */
       public void addWrapperListener(String listener);
  +
  +
  +    /**
  +     * Return the naming resources associated with this web application.
  +     */
  +    public NamingResources getNamingResources();
   
   
       /**
  
  
  
  1.9       +10 -4     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Engine.java
  
  Index: Engine.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Engine.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- Engine.java       14 Jan 2002 23:37:41 -0000      1.8
  +++ Engine.java       9 Sep 2002 23:39:03 -0000       1.9
  @@ -148,6 +148,12 @@
       public void addDefaultContext(DefaultContext defaultContext);
   
   
  +    /**
  +     * Retrieve the DefaultContext for new web applications.
  +     */
  +    public DefaultContext getDefaultContext();
  +
  +
       // --------------------------------------------------------- Public Methods
   
   
  
  
  
  1.9       +10 -4     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Host.java
  
  Index: Host.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Host.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- Host.java 27 Feb 2002 03:13:35 -0000      1.8
  +++ Host.java 9 Sep 2002 23:39:03 -0000       1.9
  @@ -156,6 +156,12 @@
   
   
       /**
  +     * Retrieve the DefaultContext for new web applications.
  +     */
  +    public DefaultContext getDefaultContext();
  +
  +
  +    /**
        * Return the canonical, fully qualified, name of the virtual host
        * this Container represents.
        */
  
  
  
  1.36      +4 -5      
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/MBeanFactory.java
  
  Index: MBeanFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/MBeanFactory.java,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- MBeanFactory.java 9 Sep 2002 19:57:05 -0000       1.35
  +++ MBeanFactory.java 9 Sep 2002 23:39:03 -0000       1.36
  @@ -837,7 +837,6 @@
       }
   
   
  -
      /**
        * Create a new StandardEngine.
        *
  
  
  
  1.31      +53 -4     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/ServerLifecycleListener.java
  
  Index: ServerLifecycleListener.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/ServerLifecycleListener.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- ServerLifecycleListener.java      19 Jun 2002 21:17:19 -0000      1.30
  +++ ServerLifecycleListener.java      9 Sep 2002 23:39:03 -0000       1.31
  @@ -493,6 +493,42 @@
   
       }
   
  +
  +    /**
  +     * Create the MBeans for the specified DefaultContext and its nested components.
  +     *
  +     * @param dcontext DefaultContext for which to create MBeans
  +     *
  +     * @exception Exception if an exception is thrown during MBean creation
  +     */
  +    protected void createMBeans(DefaultContext dcontext) throws Exception {
  +
  +        // Create the MBean for the DefaultContext itself
  +        if (debug >= 4)
  +            log("Creating MBean for DefaultContext " + dcontext);
  +        MBeanUtils.createMBean(dcontext);
  +   
  +        // Create the MBeans for the associated nested components
  +        Loader dLoader = dcontext.getLoader();
  +        if (dLoader != null) {
  +            if (debug >= 4)
  +                log("Creating MBean for Loader " + dLoader);
  +            MBeanUtils.createMBean(dLoader);
  +        }
  +     
  +        Manager dManager = dcontext.getManager();
  +        if (dManager != null) {
  +            if (debug >= 4)
  +                log("Creating MBean for Manager " + dManager);
  +            MBeanUtils.createMBean(dManager);
  +        }
  +        
  +        // Create the MBeans for the NamingResources (if any)
  +        NamingResources resources = dcontext.getNamingResources();
  +        createMBeans(resources);
  +
  +    }
  +
       
       /**
        * Create the MBeans for the specified Engine and its nested components.
  @@ -543,6 +579,12 @@
               createMBeans((Host) hosts[j]);
           }
   
  +     // Create the MBeans for DefaultContext
  +     DefaultContext dcontext = engine.getDefaultContext();
  +     if (dcontext != null) {
  +         createMBeans(dcontext);
  +     }
  +
       }
   
   
  @@ -596,6 +638,13 @@
           for (int k = 0; k < contexts.length; k++) {
               createMBeans((Context) contexts[k]);
           }
  +
  +     // Create the MBeans for DefaultContext
  +     DefaultContext dcontext = host.getDefaultContext();
  +     if (dcontext != null) {
  +         createMBeans(dcontext);
  +     }
  +     
   
       }
   
  
  
  
  1.70      +43 -2     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/mbeans-descriptors.xml
  
  Index: mbeans-descriptors.xml
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/mbeans-descriptors.xml,v
  retrieving revision 1.69
  retrieving revision 1.70
  diff -u -r1.69 -r1.70
  --- mbeans-descriptors.xml    9 Sep 2002 19:57:05 -0000       1.69
  +++ mbeans-descriptors.xml    9 Sep 2002 23:39:03 -0000       1.70
  @@ -318,7 +318,7 @@
   
   
     <mbean         name="DefaultContext"
  -              className="org.apache.catalina.mbeans.ClassNameMBean"
  +              className="org.apache.catalina.mbeans.DefaultContextMBean"
             description="Used to store the default configuration a Host will use
                           when creating a Context"
                  domain="Catalina"
  @@ -340,10 +340,51 @@
             description="The reloadable flag for this web application"
                    type="boolean"/>
   
  +    <attribute   name="swallowOutput"
  +          description="Flag to set to cause the system.out and system.err 
  +       to be redirected to the logger when executing a servlet"
  +                 type="boolean"/>
  +
       <attribute   name="useNaming"
             description="Create JNDI naming context?"
                      is="true"
                    type="boolean"/>
  +
  +    <operation   name="addEnvironment"
  +          description="Add an environment entry for this web application"
  +               impact="ACTION"
  +           returnType="void">
  +      <parameter name="envName"
  +          description="New environment entry name"
  +                 type="java.lang.String"/>
  +    </operation>
  +
  +    <operation   name="addResource"
  +          description="Add a resource reference for this web application"
  +               impact="ACTION"
  +           returnType="void">
  +      <parameter name="resourceName"
  +          description="New resource reference name"
  +                 type="java.lang.String"/>
  +    </operation>
  +
  +    <operation   name="removeEnvironment"
  +          description="Remove any environment entry with the specified name"
  +               impact="ACTION"
  +           returnType="void">
  +      <parameter name="envName"
  +          description="Name of the environment entry to remove"
  +                 type="java.lang.String"/>
  +    </operation>
  +
  +    <operation   name="removeResource"
  +          description="Remove any resource reference with the specified name"
  +               impact="ACTION"
  +           returnType="void">
  +      <parameter name="resourceName"
  +          description="Name of the resource reference to remove"
  +                 type="java.lang.String"/>
  +    </operation>
   
     </mbean>
   
  
  
  
  1.1                  
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/DefaultContextMBean.java
  
  Index: DefaultContextMBean.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/DefaultContextMBean.java,v
 1.1 2002/09/09 23:39:03 amyroh Exp $
   * $Revision: 1.1 $
   * $Date: 2002/09/09 23:39:03 $
   *
   * ====================================================================
   *
   * 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 [EMAIL PROTECTED]
   *
   * 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.catalina.mbeans;
  
  import java.net.URLDecoder;
  import java.util.ArrayList;
  import javax.management.MalformedObjectNameException;
  import javax.management.MBeanException;
  import javax.management.ObjectName;
  import javax.management.RuntimeOperationsException;
  import org.apache.catalina.core.StandardDefaultContext;
  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.catalina.deploy.ResourceParams;
  import org.apache.commons.modeler.BaseModelMBean;
  import org.apache.commons.modeler.ManagedBean;
  import org.apache.commons.modeler.Registry;
  
  /**
   * <p>A <strong>ModelMBean</strong> implementation for the
   * <code>org.apache.catalina.core.StandardDefaultContext</code> component.</p>
   *
   * @author Amy Roh
   * @version $Revision: 1.1 $ $Date: 2002/09/09 23:39:03 $
   */
  
  public class DefaultContextMBean extends BaseModelMBean {
  
  
      // ----------------------------------------------------------- Constructors
  
  
      /**
       * Construct a <code>ModelMBean</code> with default
       * <code>ModelMBeanInfo</code> information.
       *
       * @exception MBeanException if the initializer of an object
       *  throws an exception
       * @exception RuntimeOperationsException if an IllegalArgumentException
       *  occurs
       */
      public DefaultContextMBean()
          throws MBeanException, RuntimeOperationsException {
  
          super();
  
      }
      
  
      // ----------------------------------------------------- Instance Variables
      
      
      /**
       * The configuration information registry for our managed beans.
       */
      protected Registry registry = MBeanUtils.createRegistry();
  
      /**
       * The <code>ManagedBean</code> information describing this MBean.
       */
      protected ManagedBean managed =
          registry.findManagedBean("DefaultContext");
  
      
      // ------------------------------------------------------------- Attributes
  
      
      /**
       * Return the naming resources associated with this web application.
       */
      private NamingResources getNamingResources() {
          
          return ((StandardDefaultContext)this.resource).getNamingResources();
      
      }
      
      
      /**
       * Return the MBean Names of the set of defined environment entries for  
       * this web application
       */
      public String[] getEnvironments() {
          ContextEnvironment[] envs = getNamingResources().findEnvironments();
          ArrayList results = new ArrayList();
          for (int i = 0; i < envs.length; i++) {
              try {
                  ObjectName oname =
                      MBeanUtils.createObjectName(managed.getDomain(), envs[i]);
                  results.add(oname.toString());
              } catch (MalformedObjectNameException e) {
                  throw new IllegalArgumentException
                      ("Cannot create object name for environment " + envs[i]);
              }
          }
          return ((String[]) results.toArray(new String[results.size()]));
  
      }
      
      
      /**
       * Return the MBean Names of all the defined resource references for this
       * application.
       */
      public String[] getResources() {
          
          ContextResource[] resources = getNamingResources().findResources();
          ArrayList results = new ArrayList();
          for (int i = 0; i < resources.length; i++) {
              try {
                  ObjectName oname =
                      MBeanUtils.createObjectName(managed.getDomain(), resources[i]);
                  results.add(oname.toString());
              } catch (MalformedObjectNameException e) {
                  throw new IllegalArgumentException
                      ("Cannot create object name for resource " + resources[i]);
              }
          }
          return ((String[]) results.toArray(new String[results.size()]));
  
      }
  
        
      /**
       * Return the MBean Names of all the defined resource links for this 
       * application
       */
      public String[] getResourceLinks() {
          
          ContextResourceLink[] links = getNamingResources().findResourceLinks();
          ArrayList results = new ArrayList();
          for (int i = 0; i < links.length; i++) {
              try {
                  ObjectName oname =
                      MBeanUtils.createObjectName(managed.getDomain(), links[i]);
                  results.add(oname.toString());
              } catch (MalformedObjectNameException e) {
                  throw new IllegalArgumentException
                      ("Cannot create object name for resource " + links[i]);
              }
          }
          return ((String[]) results.toArray(new String[results.size()]));
  
      }
  
      // ------------------------------------------------------------- Operations
  
  
      /**
       * Add an environment entry for this web application.
       *
       * @param envName New environment entry name
       */
      public String addEnvironment(String envName, String type) 
          throws MalformedObjectNameException {
  
          NamingResources nresources = getNamingResources();
          if (nresources == null) {
              return null;
          }
          ContextEnvironment env = nresources.findEnvironment(envName);
          if (env != null) {
              throw new IllegalArgumentException
                  ("Invalid environment name - already exists '" + envName + "'");
          }
          env = new ContextEnvironment();
          env.setName(envName);
          env.setType(type);
          nresources.addEnvironment(env);
          
          // Return the corresponding MBean name
          ManagedBean managed = registry.findManagedBean("ContextEnvironment");
          ObjectName oname =
              MBeanUtils.createObjectName(managed.getDomain(), env);
          return (oname.toString());
          
      }
  
      
      /**
       * Add a resource reference for this web application.
       *
       * @param resourceName New resource reference name
       */
      public String addResource(String resourceName, String type) 
          throws MalformedObjectNameException {
          
          NamingResources nresources = getNamingResources();
          if (nresources == null) {
              return null;
          }
          ContextResource resource = nresources.findResource(resourceName);
          if (resource != null) {
              throw new IllegalArgumentException
                  ("Invalid resource name - already exists'" + resourceName + "'");
          }
          resource = new ContextResource();
          resource.setName(resourceName);
          resource.setType(type);
          nresources.addResource(resource);
          
          // Return the corresponding MBean name
          ManagedBean managed = registry.findManagedBean("ContextResource");
          ObjectName oname =
              MBeanUtils.createObjectName(managed.getDomain(), resource);
          return (oname.toString());
      }
  
      
      /**
       * Add a resource link for this web application.
       *
       * @param resourceLinkName New resource link name
       */
      public String addResourceLink(String resourceLinkName, String global, 
                  String name, String type) throws MalformedObjectNameException {
          
          NamingResources nresources = getNamingResources();
          if (nresources == null) {
              return null;
          }
          ContextResourceLink resourceLink = 
                                  nresources.findResourceLink(resourceLinkName);
          if (resourceLink != null) {
              throw new IllegalArgumentException
                  ("Invalid resource link name - already exists'" + 
                                                          resourceLinkName + "'");
          }
          resourceLink = new ContextResourceLink();
          resourceLink.setGlobal(global);
          resourceLink.setName(resourceLinkName);
          resourceLink.setType(type);
          nresources.addResourceLink(resourceLink);
          
          // Return the corresponding MBean name
          ManagedBean managed = registry.findManagedBean("ContextResourceLink");
          ObjectName oname =
              MBeanUtils.createObjectName(managed.getDomain(), resourceLink);
          return (oname.toString());
      }    
      
      
      /**
       * Remove any environment entry with the specified name.
       *
       * @param name Name of the environment entry to remove
       */
      public void removeEnvironment(String envName) {
  
          NamingResources nresources = getNamingResources();
          if (nresources == null) {
              return;
          }
          ContextEnvironment env = nresources.findEnvironment(envName);
          if (env == null) {
              throw new IllegalArgumentException
                  ("Invalid environment name '" + envName + "'");
          }
          nresources.removeEnvironment(envName);
  
      }
      
      
      /**
       * Remove any resource reference with the specified name.
       *
       * @param resourceName Name of the resource reference to remove
       */
      public void removeResource(String resourceName) {
  
          resourceName = URLDecoder.decode(resourceName);
          NamingResources nresources = getNamingResources();
          if (nresources == null) {
              return;
          }
          ContextResource resource = nresources.findResource(resourceName);
          if (resource == null) {
              throw new IllegalArgumentException
                  ("Invalid resource name '" + resourceName + "'");
          }
          nresources.removeResource(resourceName);
      }
      
      
      /**
       * Remove any resource link with the specified name.
       *
       * @param resourceName Name of the resource reference to remove
       */
      public void removeResourceLink(String resourceLinkName) {
  
          resourceLinkName = URLDecoder.decode(resourceLinkName);
          NamingResources nresources = getNamingResources();
          if (nresources == null) {
              return;
          }
          ContextResourceLink resource = nresources.findResourceLink(resourceLinkName);
          if (resource == null) {
              throw new IllegalArgumentException
                  ("Invalid resource name '" + resourceLinkName + "'");
          }
          nresources.removeResourceLink(resourceLinkName);
      }
   
      
  }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to