amyroh      2002/06/06 15:36:47

  Modified:    catalina/src/share/org/apache/catalina/mbeans
                        MBeanUtils.java StandardContextMBean.java
                        mbeans-descriptors.xml
  Log:
  Add MBean support for JNDI resource and resource link under Context.
  
  Revision  Changes    Path
  1.38      +82 -5     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/MBeanUtils.java
  
  Index: MBeanUtils.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/MBeanUtils.java,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- MBeanUtils.java   13 May 2002 18:25:47 -0000      1.37
  +++ MBeanUtils.java   6 Jun 2002 22:36:47 -0000       1.38
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/MBeanUtils.java,v
 1.37 2002/05/13 18:25:47 amyroh Exp $
  - * $Revision: 1.37 $
  - * $Date: 2002/05/13 18:25:47 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/MBeanUtils.java,v
 1.38 2002/06/06 22:36:47 amyroh Exp $
  + * $Revision: 1.38 $
  + * $Date: 2002/06/06 22:36:47 $
    *
    * ====================================================================
    *
  @@ -102,6 +102,7 @@
   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.catalina.deploy.ResourceParams;
   import org.apache.catalina.valves.ValveBase;
  @@ -115,7 +116,7 @@
    *
    * @author Craig R. McClanahan
    * @author Amy Roh
  - * @version $Revision: 1.37 $ $Date: 2002/05/13 18:25:47 $
  + * @version $Revision: 1.38 $ $Date: 2002/06/06 22:36:47 $
    */
   
   public class MBeanUtils {
  @@ -317,6 +318,34 @@
           return (mbean);
   
       }
  +
  +
  +    /**
  +     * Create, register, and return an MBean for this
  +     * <code>ContextResourceLink</code> object.
  +     *
  +     * @param resourceLink The ContextResourceLink to be managed
  +     *
  +     * @exception Exception if an MBean cannot be created or registered
  +     */
  +    public static ModelMBean createMBean(ContextResourceLink resourceLink)
  +        throws Exception {
  +
  +        String mname = createManagedName(resourceLink);
  +        ManagedBean managed = registry.findManagedBean(mname);
  +        if (managed == null) {
  +            Exception e = new Exception("ManagedBean is not found with "+mname);
  +            throw new MBeanException(e);
  +        }
  +        String domain = managed.getDomain();
  +        if (domain == null)
  +            domain = mserver.getDefaultDomain();
  +        ModelMBean mbean = managed.createMBean(resourceLink);
  +        ObjectName oname = createObjectName(domain, resourceLink);
  +        mserver.registerMBean(mbean, oname);
  +        return (mbean);
  +
  +    }    
       
       
       /**
  @@ -901,7 +930,7 @@
       
       /**
        * Create an <code>ObjectName</code> for this
  -     * <code>Service</code> object.
  +     * <code>ContextResource</code> object.
        *
        * @param domain Domain in which this name is to be created
        * @param resource The ContextResource to be named
  @@ -920,6 +949,29 @@
           return (name);
   
       }
  +  
  +    
  +     /**
  +     * Create an <code>ObjectName</code> for this
  +     * <code>ContextResourceLink</code> object.
  +     *
  +     * @param domain Domain in which this name is to be created
  +     * @param resourceLink The ContextResourceLink to be named
  +     *
  +     * @exception MalformedObjectNameException if a name cannot be created
  +     */
  +    public static ObjectName createObjectName(String domain,
  +                                              ContextResourceLink resourceLink)
  +        throws MalformedObjectNameException {
  +
  +        ObjectName name = null;
  +        String encodedResourceLinkName = encodeStr(resourceLink.getName());
  +        name = new ObjectName(domain + ":type=ResourceLink,class=" +
  +                              resourceLink.getType()+",name=" + 
  +                              encodedResourceLinkName);
  +        return (name);
  +
  +    }   
       
       
       /**
  @@ -1535,6 +1587,31 @@
           mserver.unregisterMBean(oname);
   
       }
  +     
  +    
  +    /**
  +     * Deregister the MBean for this
  +     * <code>ContextResourceLink</code> object.
  +     *
  +     * @param resourceLink The ContextResourceLink to be managed
  +     *
  +     * @exception Exception if an MBean cannot be deregistered
  +     */
  +    public static void destroyMBean(ContextResourceLink resourceLink)
  +        throws Exception {
  +
  +        String mname = createManagedName(resourceLink);
  +        ManagedBean managed = registry.findManagedBean(mname);
  +        if (managed == null) {
  +            return;
  +        }
  +        String domain = managed.getDomain();
  +        if (domain == null)
  +            domain = mserver.getDefaultDomain();
  +        ObjectName oname = createObjectName(domain, resourceLink);
  +        mserver.unregisterMBean(oname);
  +
  +    }   
       
       
       /**
  
  
  
  1.6       +262 -16   
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/StandardContextMBean.java
  
  Index: StandardContextMBean.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/StandardContextMBean.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- StandardContextMBean.java 8 Mar 2002 22:01:07 -0000       1.5
  +++ StandardContextMBean.java 6 Jun 2002 22:36:47 -0000       1.6
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/StandardContextMBean.java,v
 1.5 2002/03/08 22:01:07 amyroh Exp $
  - * $Revision: 1.5 $
  - * $Date: 2002/03/08 22:01:07 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/mbeans/StandardContextMBean.java,v
 1.6 2002/06/06 22:36:47 amyroh Exp $
  + * $Revision: 1.6 $
  + * $Date: 2002/06/06 22:36:47 $
    *
    * ====================================================================
    *
  @@ -63,34 +63,32 @@
   
   package org.apache.catalina.mbeans;
   
  -
  +import java.net.URLDecoder;
  +import java.util.ArrayList;
  +import javax.management.MalformedObjectNameException;
   import javax.management.MBeanException;
  -import javax.management.MBeanServer;
   import javax.management.ObjectName;
   import javax.management.RuntimeOperationsException;
  -import org.apache.catalina.Loader;
  -import org.apache.catalina.Logger;
  -import org.apache.catalina.Manager;
  -import org.apache.catalina.Realm;
  -import org.apache.catalina.Valve;
   import org.apache.catalina.core.StandardContext;
  +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.StandardContext</code> component.</p>
    *
    * @author Amy Roh
  - * @version $Revision: 1.5 $ $Date: 2002/03/08 22:01:07 $
  + * @version $Revision: 1.6 $ $Date: 2002/06/06 22:36:47 $
    */
   
   public class StandardContextMBean extends BaseModelMBean {
   
  -    /**
  -     * The <code>MBeanServer</code> for this application.
  -     */
  -    private static MBeanServer mserver = MBeanUtils.createServer();
   
       // ----------------------------------------------------------- Constructors
   
  @@ -110,13 +108,261 @@
           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("StandardContext");
   
  +    
       // ------------------------------------------------------------- Attributes
   
  +    
  +    /**
  +     * Return the naming resources associated with this web application.
  +     */
  +    private NamingResources getNamingResources() {
  +        
  +        return ((StandardContext)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);
  +    }
  + 
       
   }
  
  
  
  1.60      +71 -1     
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.59
  retrieving revision 1.60
  diff -u -r1.59 -r1.60
  --- mbeans-descriptors.xml    30 May 2002 19:43:29 -0000      1.59
  +++ mbeans-descriptors.xml    6 Jun 2002 22:36:47 -0000       1.60
  @@ -6,7 +6,7 @@
   <!--
        Descriptions of JMX MBeans for Catalina
   
  -     $Id: mbeans-descriptors.xml,v 1.59 2002/05/30 19:43:29 manveen Exp $
  +     $Id: mbeans-descriptors.xml,v 1.60 2002/06/06 22:36:47 amyroh Exp $
    -->
   
   <mbeans-descriptors>
  @@ -193,6 +193,28 @@
     </mbean>
   
   
  +   <mbean         name="ContextResourceLink"
  +            className="org.apache.catalina.mbeans.ClassNameMBean"
  +          description="Representation of a resource link for a web application"
  +               domain="Catalina"
  +                group="Resources"
  +                 type="org.apache.catalina.deploy.ContextResourceLink">
  +
  +    <attribute   name="global"
  +          description="The global name of this resource"
  +                 type="java.lang.String"/>
  +
  +    <attribute   name="name"
  +          description="The name of this resource"
  +                 type="java.lang.String"/>
  +
  +    <attribute   name="type"
  +          description="The type of this resource"
  +                 type="java.lang.String"/>
  +
  +  </mbean>
  +
  +
     <mbean         name="CoyoteConnector"
               className="org.apache.catalina.mbeans.ConnectorMBean"
             description="Implementation of a Coyote connector"
  @@ -1841,6 +1863,12 @@
             description="The document root for this web application"
                    type="java.lang.String"/>
   
  +    <attribute   name="environments"
  +          description="MBean Names of the set of defined environment entries 
  +       for this web application"
  +                 type="java.lang.String[]"
  +            writeable="false"/>
  +
       <attribute   name="managedResource"
             description="The managed resource this MBean is associated with"
                    type="java.lang.Object"/>
  @@ -1858,6 +1886,12 @@
             description="The reloadable flag for this web application"
                    type="boolean"/>
   
  +    <attribute   name="resources"
  +          description="MBean Names of all the defined resource references 
  +       for this application."
  +                 type="java.lang.String[]"
  +            writeable="false"/>
  +
       <attribute   name="useNaming"
             description="Create a JNDI naming context for this application?"
                      is="true"
  @@ -1866,6 +1900,42 @@
       <attribute   name="workDir"
             description="The pathname to the work directory for this context"
                    type="java.lang.String"/>
  +
  +    <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>
   
  
  
  

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

Reply via email to