Save This Page
Home » Tomcat-6.0.20 » org.apache » catalina » mbeans » [javadoc | source]
    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    * 
    9    *      http://www.apache.org/licenses/LICENSE-2.0
   10    * 
   11    * Unless required by applicable law or agreed to in writing, software
   12    * distributed under the License is distributed on an "AS IS" BASIS,
   13    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   14    * See the License for the specific language governing permissions and
   15    * limitations under the License.
   16    */
   17   
   18   package org.apache.catalina.mbeans;
   19   
   20   
   21   import java.util.Hashtable;
   22   
   23   import javax.management.DynamicMBean;
   24   import javax.management.MBeanException;
   25   import javax.management.MBeanServer;
   26   import javax.management.MalformedObjectNameException;
   27   import javax.management.ObjectName;
   28   
   29   import org.apache.catalina.Contained;
   30   import org.apache.catalina.Container;
   31   import org.apache.catalina.Context;
   32   import org.apache.catalina.Engine;
   33   import org.apache.catalina.Group;
   34   import org.apache.catalina.Host;
   35   import org.apache.catalina.Loader;
   36   import org.apache.catalina.Manager;
   37   import org.apache.catalina.Realm;
   38   import org.apache.catalina.Role;
   39   import org.apache.catalina.Server;
   40   import org.apache.catalina.Service;
   41   import org.apache.catalina.User;
   42   import org.apache.catalina.UserDatabase;
   43   import org.apache.catalina.Valve;
   44   import org.apache.catalina.connector.Connector;
   45   import org.apache.catalina.deploy.ContextEnvironment;
   46   import org.apache.catalina.deploy.ContextResource;
   47   import org.apache.catalina.deploy.ContextResourceLink;
   48   import org.apache.catalina.deploy.NamingResources;
   49   import org.apache.catalina.valves.ValveBase;
   50   import org.apache.juli.logging.Log;
   51   import org.apache.juli.logging.LogFactory;
   52   import org.apache.tomcat.util.IntrospectionUtils;
   53   import org.apache.tomcat.util.modeler.ManagedBean;
   54   import org.apache.tomcat.util.modeler.Registry;
   55   
   56   
   57   /**
   58    * Public utility methods in support of the server side MBeans implementation.
   59    *
   60    * @author Craig R. McClanahan
   61    * @author Amy Roh
   62    * @version $Revision: 500684 $ $Date: 2007-01-28 00:27:18 +0100 (Sun, 28 Jan 2007) $
   63    */
   64   
   65   public class MBeanUtils {
   66       private static Log log = LogFactory.getLog(MBeanUtils.class);
   67   
   68       // ------------------------------------------------------- Static Variables
   69   
   70   
   71       /**
   72        * The set of exceptions to the normal rules used by
   73        * <code>createManagedBean()</code>.  The first element of each pair
   74        * is a class name, and the second element is the managed bean name.
   75        */
   76       private static String exceptions[][] = {
   77           { "org.apache.ajp.tomcat4.Ajp13Connector",
   78             "Ajp13Connector" },
   79           { "org.apache.coyote.tomcat4.Ajp13Connector",
   80             "CoyoteConnector" },
   81           { "org.apache.catalina.users.JDBCGroup",
   82             "Group" },
   83           { "org.apache.catalina.users.JDBCRole",
   84             "Role" },
   85           { "org.apache.catalina.users.JDBCUser",
   86             "User" },
   87           { "org.apache.catalina.users.MemoryGroup",
   88             "Group" },
   89           { "org.apache.catalina.users.MemoryRole",
   90             "Role" },
   91           { "org.apache.catalina.users.MemoryUser",
   92             "User" },
   93       };
   94   
   95   
   96       /**
   97        * The configuration information registry for our managed beans.
   98        */
   99       private static Registry registry = createRegistry();
  100   
  101   
  102       /**
  103        * The <code>MBeanServer</code> for this application.
  104        */
  105       private static MBeanServer mserver = createServer();
  106   
  107   
  108       // --------------------------------------------------------- Static Methods
  109   
  110       /**
  111        * Create and return the name of the <code>ManagedBean</code> that
  112        * corresponds to this Catalina component.
  113        *
  114        * @param component The component for which to create a name
  115        */
  116       static String createManagedName(Object component) {
  117   
  118           // Deal with exceptions to the standard rule
  119           String className = component.getClass().getName();
  120           for (int i = 0; i < exceptions.length; i++) {
  121               if (className.equals(exceptions[i][0])) {
  122                   return (exceptions[i][1]);
  123               }
  124           }
  125   
  126           // Perform the standard transformation
  127           int period = className.lastIndexOf('.');
  128           if (period >= 0)
  129               className = className.substring(period + 1);
  130           return (className);
  131   
  132       }
  133   
  134   
  135       /**
  136        * Create, register, and return an MBean for this
  137        * <code>Connector</code> object.
  138        *
  139        * @param connector The Connector to be managed
  140        *
  141        * @exception Exception if an MBean cannot be created or registered
  142        */
  143       static DynamicMBean createMBean(Connector connector)
  144           throws Exception {
  145   
  146           String mname = createManagedName(connector);
  147           ManagedBean managed = registry.findManagedBean(mname);
  148           if (managed == null) {
  149               Exception e = new Exception("ManagedBean is not found with "+mname);
  150               throw new MBeanException(e);
  151           }
  152           String domain = managed.getDomain();
  153           if (domain == null)
  154               domain = mserver.getDefaultDomain();
  155           DynamicMBean mbean = managed.createMBean(connector);
  156           ObjectName oname = createObjectName(domain, connector);
  157           if( mserver.isRegistered( oname ))  {
  158               mserver.unregisterMBean(oname);
  159           }
  160           mserver.registerMBean(mbean, oname);
  161           return (mbean);
  162   
  163       }
  164   
  165   
  166       /**
  167        * Create, register, and return an MBean for this
  168        * <code>Context</code> object.
  169        *
  170        * @param context The Context to be managed
  171        *
  172        * @exception Exception if an MBean cannot be created or registered
  173        */
  174       static DynamicMBean createMBean(Context context)
  175           throws Exception {
  176   
  177           String mname = createManagedName(context);
  178           ManagedBean managed = registry.findManagedBean(mname);
  179           if (managed == null) {
  180               Exception e = new Exception("ManagedBean is not found with "+mname);
  181               throw new MBeanException(e);
  182           }
  183           String domain = managed.getDomain();
  184           if (domain == null)
  185               domain = mserver.getDefaultDomain();
  186           DynamicMBean mbean = managed.createMBean(context);
  187           ObjectName oname = createObjectName(domain, context);
  188           if( mserver.isRegistered(oname)) {
  189               log.debug("Already registered " + oname);
  190               mserver.unregisterMBean(oname);
  191           }
  192           mserver.registerMBean(mbean, oname);
  193           return (mbean);
  194   
  195       }
  196   
  197       
  198       /**
  199        * Create, register, and return an MBean for this
  200        * <code>ContextEnvironment</code> object.
  201        *
  202        * @param environment The ContextEnvironment to be managed
  203        *
  204        * @exception Exception if an MBean cannot be created or registered
  205        */
  206       static DynamicMBean createMBean(ContextEnvironment environment)
  207           throws Exception {
  208   
  209           String mname = createManagedName(environment);
  210           ManagedBean managed = registry.findManagedBean(mname);
  211           if (managed == null) {
  212               Exception e = new Exception("ManagedBean is not found with "+mname);
  213               throw new MBeanException(e);
  214           }
  215           String domain = managed.getDomain();
  216           if (domain == null)
  217               domain = mserver.getDefaultDomain();
  218           DynamicMBean mbean = managed.createMBean(environment);
  219           ObjectName oname = createObjectName(domain, environment);
  220           if( mserver.isRegistered( oname ))  {
  221               mserver.unregisterMBean(oname);
  222           }
  223           mserver.registerMBean(mbean, oname);
  224           return (mbean);
  225   
  226       }
  227   
  228   
  229       /**
  230        * Create, register, and return an MBean for this
  231        * <code>ContextResource</code> object.
  232        *
  233        * @param resource The ContextResource to be managed
  234        *
  235        * @exception Exception if an MBean cannot be created or registered
  236        */
  237       static DynamicMBean createMBean(ContextResource resource)
  238           throws Exception {
  239   
  240           String mname = createManagedName(resource);
  241           ManagedBean managed = registry.findManagedBean(mname);
  242           if (managed == null) {
  243               Exception e = new Exception("ManagedBean is not found with "+mname);
  244               throw new MBeanException(e);
  245           }
  246           String domain = managed.getDomain();
  247           if (domain == null)
  248               domain = mserver.getDefaultDomain();
  249           DynamicMBean mbean = managed.createMBean(resource);
  250           ObjectName oname = createObjectName(domain, resource);
  251           if( mserver.isRegistered( oname ))  {
  252               mserver.unregisterMBean(oname);
  253           }
  254           mserver.registerMBean(mbean, oname);
  255           return (mbean);
  256   
  257       }
  258   
  259   
  260       /**
  261        * Create, register, and return an MBean for this
  262        * <code>ContextResourceLink</code> object.
  263        *
  264        * @param resourceLink The ContextResourceLink to be managed
  265        *
  266        * @exception Exception if an MBean cannot be created or registered
  267        */
  268       static DynamicMBean createMBean(ContextResourceLink resourceLink)
  269           throws Exception {
  270   
  271           String mname = createManagedName(resourceLink);
  272           ManagedBean managed = registry.findManagedBean(mname);
  273           if (managed == null) {
  274               Exception e = new Exception("ManagedBean is not found with "+mname);
  275               throw new MBeanException(e);
  276           }
  277           String domain = managed.getDomain();
  278           if (domain == null)
  279               domain = mserver.getDefaultDomain();
  280           DynamicMBean mbean = managed.createMBean(resourceLink);
  281           ObjectName oname = createObjectName(domain, resourceLink);
  282           if( mserver.isRegistered( oname ))  {
  283               mserver.unregisterMBean(oname);
  284           }
  285           mserver.registerMBean(mbean, oname);
  286           return (mbean);
  287   
  288       }    
  289    
  290       /**
  291        * Create, register, and return an MBean for this
  292        * <code>Engine</code> object.
  293        *
  294        * @param engine The Engine to be managed
  295        *
  296        * @exception Exception if an MBean cannot be created or registered
  297        */
  298       static DynamicMBean createMBean(Engine engine)
  299           throws Exception {
  300   
  301           String mname = createManagedName(engine);
  302           ManagedBean managed = registry.findManagedBean(mname);
  303           if (managed == null) {
  304               Exception e = new Exception("ManagedBean is not found with "+mname);
  305               throw new MBeanException(e);
  306           }
  307           String domain = managed.getDomain();
  308           if (domain == null)
  309               domain = mserver.getDefaultDomain();
  310           DynamicMBean mbean = managed.createMBean(engine);
  311           ObjectName oname = createObjectName(domain, engine);
  312           if( mserver.isRegistered( oname ))  {
  313               mserver.unregisterMBean(oname);
  314           }
  315           mserver.registerMBean(mbean, oname);
  316           return (mbean);
  317   
  318       }
  319   
  320   
  321       /**
  322        * Create, register, and return an MBean for this
  323        * <code>Group</code> object.
  324        *
  325        * @param group The Group to be managed
  326        *
  327        * @exception Exception if an MBean cannot be created or registered
  328        */
  329       static DynamicMBean createMBean(Group group)
  330           throws Exception {
  331   
  332           String mname = createManagedName(group);
  333           ManagedBean managed = registry.findManagedBean(mname);
  334           if (managed == null) {
  335               Exception e = new Exception("ManagedBean is not found with "+mname);
  336               throw new MBeanException(e);
  337           }
  338           String domain = managed.getDomain();
  339           if (domain == null)
  340               domain = mserver.getDefaultDomain();
  341           DynamicMBean mbean = managed.createMBean(group);
  342           ObjectName oname = createObjectName(domain, group);
  343           if( mserver.isRegistered( oname ))  {
  344               mserver.unregisterMBean(oname);
  345           }
  346           mserver.registerMBean(mbean, oname);
  347           return (mbean);
  348   
  349       }
  350   
  351   
  352       /**
  353        * Create, register, and return an MBean for this
  354        * <code>Host</code> object.
  355        *
  356        * @param host The Host to be managed
  357        *
  358        * @exception Exception if an MBean cannot be created or registered
  359        */
  360       static DynamicMBean createMBean(Host host)
  361           throws Exception {
  362   
  363           String mname = createManagedName(host);
  364           ManagedBean managed = registry.findManagedBean(mname);
  365           if (managed == null) {
  366               Exception e = new Exception("ManagedBean is not found with "+mname);
  367               throw new MBeanException(e);
  368           }
  369           String domain = managed.getDomain();
  370           if (domain == null)
  371               domain = mserver.getDefaultDomain();
  372           DynamicMBean mbean = managed.createMBean(host);
  373           ObjectName oname = createObjectName(domain, host);
  374           if( mserver.isRegistered( oname ))  {
  375               mserver.unregisterMBean(oname);
  376           }
  377           mserver.registerMBean(mbean, oname);
  378           return (mbean);
  379   
  380       }
  381   
  382   
  383       /**
  384        * Create, register, and return an MBean for this
  385        * <code>Loader</code> object.
  386        *
  387        * @param loader The Loader to be managed
  388        *
  389        * @exception Exception if an MBean cannot be created or registered
  390        */
  391       static DynamicMBean createMBean(Loader loader)
  392           throws Exception {
  393   
  394           String mname = createManagedName(loader);
  395           ManagedBean managed = registry.findManagedBean(mname);
  396           if (managed == null) {
  397               Exception e = new Exception("ManagedBean is not found with "+mname);
  398               throw new MBeanException(e);
  399           }
  400           String domain = managed.getDomain();
  401           if (domain == null)
  402               domain = mserver.getDefaultDomain();
  403           DynamicMBean mbean = managed.createMBean(loader);
  404           ObjectName oname = createObjectName(domain, loader);
  405           if( mserver.isRegistered( oname ))  {
  406               // side effect: stop it
  407               mserver.unregisterMBean( oname );
  408           }
  409           mserver.registerMBean(mbean, oname);
  410           return (mbean);
  411   
  412       }
  413   
  414       /**
  415        * Create, register, and return an MBean for this
  416        * <code>Manager</code> object.
  417        *
  418        * @param manager The Manager to be managed
  419        *
  420        * @exception Exception if an MBean cannot be created or registered
  421        */
  422       static DynamicMBean createMBean(Manager manager)
  423           throws Exception {
  424   
  425           String mname = createManagedName(manager);
  426           ManagedBean managed = registry.findManagedBean(mname);
  427           if (managed == null) {
  428               Exception e = new Exception("ManagedBean is not found with "+mname);
  429               throw new MBeanException(e);
  430           }
  431           String domain = managed.getDomain();
  432           if (domain == null)
  433               domain = mserver.getDefaultDomain();
  434           DynamicMBean mbean = managed.createMBean(manager);
  435           ObjectName oname = createObjectName(domain, manager);
  436           if( mserver.isRegistered( oname ))  {
  437               mserver.unregisterMBean(oname);
  438           }
  439           mserver.registerMBean(mbean, oname);
  440           return (mbean);
  441   
  442       }
  443   
  444   
  445       /**
  446        * Create, register, and return an MBean for this
  447        * <code>MBeanFactory</code> object.
  448        *
  449        * @param factory The MBeanFactory to be managed
  450        *
  451        * @exception Exception if an MBean cannot be created or registered
  452        */
  453       static DynamicMBean createMBean(MBeanFactory factory)
  454           throws Exception {
  455   
  456           String mname = createManagedName(factory);
  457           ManagedBean managed = registry.findManagedBean(mname);
  458           if (managed == null) {
  459               Exception e = new Exception("ManagedBean is not found with "+mname);
  460               throw new MBeanException(e);
  461           }
  462           String domain = managed.getDomain();
  463           if (domain == null)
  464               domain = mserver.getDefaultDomain();
  465           DynamicMBean mbean = managed.createMBean(factory);
  466           ObjectName oname = createObjectName(domain, factory);
  467           if( mserver.isRegistered(oname )) {
  468               mserver.unregisterMBean(oname);
  469           }
  470           mserver.registerMBean(mbean, oname);
  471           return (mbean);
  472   
  473       }
  474   
  475   
  476       /**
  477        * Create, register, and return an MBean for this
  478        * <code>NamingResources</code> object.
  479        *
  480        * @param resource The NamingResources to be managed
  481        *
  482        * @exception Exception if an MBean cannot be created or registered
  483        */
  484       static DynamicMBean createMBean(NamingResources resource)
  485           throws Exception {
  486   
  487           String mname = createManagedName(resource);
  488           ManagedBean managed = registry.findManagedBean(mname);
  489           if (managed == null) {
  490               Exception e = new Exception("ManagedBean is not found with "+mname);
  491               throw new MBeanException(e);
  492           }
  493           String domain = managed.getDomain();
  494           if (domain == null)
  495               domain = mserver.getDefaultDomain();
  496           DynamicMBean mbean = managed.createMBean(resource);
  497           ObjectName oname = createObjectName(domain, resource);
  498           if( mserver.isRegistered( oname ))  {
  499               mserver.unregisterMBean(oname);
  500           }
  501           mserver.registerMBean(mbean, oname);
  502           return (mbean);
  503   
  504       }
  505   
  506       
  507       /**
  508        * Create, register, and return an MBean for this
  509        * <code>Realm</code> object.
  510        *
  511        * @param realm The Realm to be managed
  512        *
  513        * @exception Exception if an MBean cannot be created or registered
  514        */
  515       static DynamicMBean createMBean(Realm realm)
  516           throws Exception {
  517   
  518           String mname = createManagedName(realm);
  519           ManagedBean managed = registry.findManagedBean(mname);
  520           if (managed == null) {
  521               Exception e = new Exception("ManagedBean is not found with "+mname);
  522               throw new MBeanException(e);
  523           }
  524           String domain = managed.getDomain();
  525           if (domain == null)
  526               domain = mserver.getDefaultDomain();
  527           DynamicMBean mbean = managed.createMBean(realm);
  528           ObjectName oname = createObjectName(domain, realm);
  529           if( mserver.isRegistered( oname ))  {
  530               mserver.unregisterMBean(oname);
  531           }
  532           mserver.registerMBean(mbean, oname);
  533           return (mbean);
  534   
  535       }
  536   
  537   
  538       /**
  539        * Create, register, and return an MBean for this
  540        * <code>Role</code> object.
  541        *
  542        * @param role The Role to be managed
  543        *
  544        * @exception Exception if an MBean cannot be created or registered
  545        */
  546       static DynamicMBean createMBean(Role role)
  547           throws Exception {
  548   
  549           String mname = createManagedName(role);
  550           ManagedBean managed = registry.findManagedBean(mname);
  551           if (managed == null) {
  552               Exception e = new Exception("ManagedBean is not found with "+mname);
  553               throw new MBeanException(e);
  554           }
  555           String domain = managed.getDomain();
  556           if (domain == null)
  557               domain = mserver.getDefaultDomain();
  558           DynamicMBean mbean = managed.createMBean(role);
  559           ObjectName oname = createObjectName(domain, role);
  560           if( mserver.isRegistered( oname ))  {
  561               mserver.unregisterMBean(oname);
  562           }
  563           mserver.registerMBean(mbean, oname);
  564           return (mbean);
  565   
  566       }
  567   
  568   
  569       /**
  570        * Create, register, and return an MBean for this
  571        * <code>Server</code> object.
  572        *
  573        * @param server The Server to be managed
  574        *
  575        * @exception Exception if an MBean cannot be created or registered
  576        */
  577       static DynamicMBean createMBean(Server server)
  578           throws Exception {
  579   
  580           String mname = createManagedName(server);
  581           ManagedBean managed = registry.findManagedBean(mname);
  582           if (managed == null) {
  583               Exception e = new Exception("ManagedBean is not found with "+mname);
  584               throw new MBeanException(e);
  585           }
  586           String domain = managed.getDomain();
  587           if (domain == null)
  588               domain = mserver.getDefaultDomain();
  589           DynamicMBean mbean = managed.createMBean(server);
  590           ObjectName oname = createObjectName(domain, server);
  591           if( mserver.isRegistered( oname ))  {
  592               mserver.unregisterMBean(oname);
  593           }
  594           mserver.registerMBean(mbean, oname);
  595           return (mbean);
  596   
  597       }
  598   
  599   
  600       /**
  601        * Create, register, and return an MBean for this
  602        * <code>Service</code> object.
  603        *
  604        * @param service The Service to be managed
  605        *
  606        * @exception Exception if an MBean cannot be created or registered
  607        */
  608       static DynamicMBean createMBean(Service service)
  609           throws Exception {
  610   
  611           String mname = createManagedName(service);
  612           ManagedBean managed = registry.findManagedBean(mname);
  613           if (managed == null) {
  614               Exception e = new Exception("ManagedBean is not found with "+mname);
  615               throw new MBeanException(e);
  616           }
  617           String domain = managed.getDomain();
  618           if (domain == null)
  619               domain = mserver.getDefaultDomain();
  620           DynamicMBean mbean = managed.createMBean(service);
  621           ObjectName oname = createObjectName(domain, service);
  622           if( mserver.isRegistered( oname ))  {
  623               mserver.unregisterMBean(oname);
  624           }
  625           mserver.registerMBean(mbean, oname);
  626           return (mbean);
  627   
  628       }
  629   
  630   
  631       /**
  632        * Create, register, and return an MBean for this
  633        * <code>User</code> object.
  634        *
  635        * @param user The User to be managed
  636        *
  637        * @exception Exception if an MBean cannot be created or registered
  638        */
  639       static DynamicMBean createMBean(User user)
  640           throws Exception {
  641   
  642           String mname = createManagedName(user);
  643           ManagedBean managed = registry.findManagedBean(mname);
  644           if (managed == null) {
  645               Exception e = new Exception("ManagedBean is not found with "+mname);
  646               throw new MBeanException(e);
  647           }
  648           String domain = managed.getDomain();
  649           if (domain == null)
  650               domain = mserver.getDefaultDomain();
  651           DynamicMBean mbean = managed.createMBean(user);
  652           ObjectName oname = createObjectName(domain, user);
  653           if( mserver.isRegistered( oname ))  {
  654               mserver.unregisterMBean(oname);
  655           }
  656           mserver.registerMBean(mbean, oname);
  657           return (mbean);
  658   
  659       }
  660   
  661   
  662       /**
  663        * Create, register, and return an MBean for this
  664        * <code>UserDatabase</code> object.
  665        *
  666        * @param userDatabase The UserDatabase to be managed
  667        *
  668        * @exception Exception if an MBean cannot be created or registered
  669        */
  670       static DynamicMBean createMBean(UserDatabase userDatabase)
  671           throws Exception {
  672   
  673           String mname = createManagedName(userDatabase);
  674           ManagedBean managed = registry.findManagedBean(mname);
  675           if (managed == null) {
  676               Exception e = new Exception("ManagedBean is not found with "+mname);
  677               throw new MBeanException(e);
  678           }
  679           String domain = managed.getDomain();
  680           if (domain == null)
  681               domain = mserver.getDefaultDomain();
  682           DynamicMBean mbean = managed.createMBean(userDatabase);
  683           ObjectName oname = createObjectName(domain, userDatabase);
  684           if( mserver.isRegistered( oname ))  {
  685               mserver.unregisterMBean(oname);
  686           }
  687           mserver.registerMBean(mbean, oname);
  688           return (mbean);
  689   
  690       }
  691   
  692   
  693       /**
  694        * Create, register, and return an MBean for this
  695        * <code>Valve</code> object.
  696        *
  697        * @param valve The Valve to be managed
  698        *
  699        * @exception Exception if an MBean cannot be created or registered
  700        */
  701       static DynamicMBean createMBean(Valve valve)
  702           throws Exception {
  703   
  704           String mname = createManagedName(valve);
  705           ManagedBean managed = registry.findManagedBean(mname);
  706           if (managed == null) {
  707               Exception e = new Exception("ManagedBean is not found with "+mname);
  708               throw new MBeanException(e);
  709           }
  710           String domain = managed.getDomain();
  711           if (domain == null)
  712               domain = mserver.getDefaultDomain();
  713           DynamicMBean mbean = managed.createMBean(valve);
  714           ObjectName oname = createObjectName(domain, valve);
  715           if( mserver.isRegistered( oname ))  {
  716               mserver.unregisterMBean(oname);
  717           }
  718           mserver.registerMBean(mbean, oname);
  719           return (mbean);
  720   
  721       }
  722   
  723       /**
  724        * Create an <code>ObjectName</code> for this
  725        * <code>Connector</code> object.
  726        *
  727        * @param domain Domain in which this name is to be created
  728        * @param connector The Connector to be named
  729        *
  730        * @exception MalformedObjectNameException if a name cannot be created
  731        */
  732       static ObjectName createObjectName(String domain,
  733                                           Connector connector)
  734           throws MalformedObjectNameException {
  735   
  736           ObjectName name = null;
  737           if (connector.getClass().getName().indexOf("CoyoteConnector") >= 0 ) {
  738               try {
  739                   String address = (String)
  740                       IntrospectionUtils.getProperty(connector, "address");
  741                   Integer port = (Integer)
  742                       IntrospectionUtils.getProperty(connector, "port");
  743                   Service service = connector.getService();
  744                   String serviceName = null;
  745                   if (service != null)
  746                       serviceName = service.getName();
  747                   StringBuffer sb = new StringBuffer(domain);
  748                   sb.append(":type=Connector");
  749                   sb.append(",port=" + port);
  750                   if ((address != null) && (address.length()>0)) {
  751                       sb.append(",address=" + address);
  752                   }
  753                   name = new ObjectName(sb.toString());
  754                   return (name);
  755               } catch (Exception e) {
  756                   throw new MalformedObjectNameException
  757                       ("Cannot create object name for " + connector+e);
  758               }
  759           } else {
  760               throw new MalformedObjectNameException
  761                   ("Cannot create object name for " + connector);
  762           }
  763   
  764       }
  765   
  766   
  767       /**
  768        * Create an <code>ObjectName</code> for this
  769        * <code>Context</code> object.
  770        *
  771        * @param domain Domain in which this name is to be created
  772        * @param context The Context to be named
  773        *
  774        * @exception MalformedObjectNameException if a name cannot be created
  775        */
  776       static ObjectName createObjectName(String domain,
  777                                                 Context context)
  778           throws MalformedObjectNameException {
  779   
  780           ObjectName name = null;
  781           Host host = (Host)context.getParent();
  782           Service service = ((Engine)host.getParent()).getService();
  783           String path = context.getPath();
  784           if (path.length() < 1)
  785               path = "/";
  786           // FIXME 
  787           name = new ObjectName(domain + ":j2eeType=WebModule,name=//" +
  788                                 host.getName()+ path +
  789                                 ",J2EEApplication=none,J2EEServer=none");
  790       
  791           return (name);
  792   
  793       }
  794   
  795       
  796       /**
  797        * Create an <code>ObjectName</code> for this
  798        * <code>Service</code> object.
  799        *
  800        * @param domain Domain in which this name is to be created
  801        * @param environment The ContextEnvironment to be named
  802        *
  803        * @exception MalformedObjectNameException if a name cannot be created
  804        */
  805       public static ObjectName createObjectName(String domain,
  806                                                 ContextEnvironment environment)
  807           throws MalformedObjectNameException {
  808   
  809           ObjectName name = null;
  810           Object container = 
  811                   environment.getNamingResources().getContainer();
  812           if (container instanceof Server) {
  813               name = new ObjectName(domain + ":type=Environment" + 
  814                           ",resourcetype=Global,name=" + environment.getName());
  815           } else if (container instanceof Context) {        
  816               String path = ((Context)container).getPath();
  817               if (path.length() < 1)
  818                   path = "/";
  819               Host host = (Host) ((Context)container).getParent();
  820               Engine engine = (Engine) host.getParent();
  821               Service service = engine.getService();
  822               name = new ObjectName(domain + ":type=Environment" + 
  823                           ",resourcetype=Context,path=" + path + 
  824                           ",host=" + host.getName() +
  825                           ",name=" + environment.getName());
  826           }        
  827           return (name);
  828   
  829       }
  830       
  831       
  832       /**
  833        * Create an <code>ObjectName</code> for this
  834        * <code>ContextResource</code> object.
  835        *
  836        * @param domain Domain in which this name is to be created
  837        * @param resource The ContextResource to be named
  838        *
  839        * @exception MalformedObjectNameException if a name cannot be created
  840        */
  841       public static ObjectName createObjectName(String domain,
  842                                                 ContextResource resource)
  843           throws MalformedObjectNameException {
  844   
  845           ObjectName name = null;
  846           String quotedResourceName = ObjectName.quote(resource.getName());
  847           Object container = 
  848                   resource.getNamingResources().getContainer();
  849           if (container instanceof Server) {        
  850               name = new ObjectName(domain + ":type=Resource" +
  851                           ",resourcetype=Global,class=" + resource.getType() + 
  852                           ",name=" + quotedResourceName);
  853           } else if (container instanceof Context) {                    
  854               String path = ((Context)container).getPath();
  855               if (path.length() < 1)
  856                   path = "/";
  857               Host host = (Host) ((Context)container).getParent();
  858               Engine engine = (Engine) host.getParent();
  859               Service service = engine.getService();
  860               name = new ObjectName(domain + ":type=Resource" +
  861                           ",resourcetype=Context,path=" + path + 
  862                           ",host=" + host.getName() +
  863                           ",class=" + resource.getType() +
  864                           ",name=" + quotedResourceName);
  865           }
  866           
  867           return (name);
  868   
  869       }
  870     
  871       
  872        /**
  873        * Create an <code>ObjectName</code> for this
  874        * <code>ContextResourceLink</code> object.
  875        *
  876        * @param domain Domain in which this name is to be created
  877        * @param resourceLink The ContextResourceLink to be named
  878        *
  879        * @exception MalformedObjectNameException if a name cannot be created
  880        */
  881       public static ObjectName createObjectName(String domain,
  882                                                 ContextResourceLink resourceLink)
  883           throws MalformedObjectNameException {
  884   
  885           ObjectName name = null;
  886           String quotedResourceLinkName
  887                   = ObjectName.quote(resourceLink.getName());        
  888           Object container = 
  889                   resourceLink.getNamingResources().getContainer();
  890           if (container instanceof Server) {        
  891               name = new ObjectName(domain + ":type=ResourceLink" +
  892                           ",resourcetype=Global" + 
  893                           ",name=" + quotedResourceLinkName);
  894           } else if (container instanceof Context) {                    
  895               String path = ((Context)container).getPath();
  896               if (path.length() < 1)
  897                   path = "/";
  898               Host host = (Host) ((Context)container).getParent();
  899               Engine engine = (Engine) host.getParent();
  900               Service service = engine.getService();
  901               name = new ObjectName(domain + ":type=ResourceLink" +
  902                           ",resourcetype=Context,path=" + path + 
  903                           ",host=" + host.getName() +
  904                           ",name=" + quotedResourceLinkName);
  905           }
  906           
  907           return (name);
  908   
  909       }
  910       
  911       
  912    
  913       /**
  914        * Create an <code>ObjectName</code> for this
  915        * <code>Engine</code> object.
  916        *
  917        * @param domain Domain in which this name is to be created
  918        * @param engine The Engine to be named
  919        *
  920        * @exception MalformedObjectNameException if a name cannot be created
  921        */
  922       static ObjectName createObjectName(String domain,
  923                                                 Engine engine)
  924           throws MalformedObjectNameException {
  925   
  926           ObjectName name = null;
  927           name = new ObjectName(domain + ":type=Engine");
  928           return (name);
  929   
  930       }
  931   
  932   
  933       /**
  934        * Create an <code>ObjectName</code> for this
  935        * <code>Group</code> object.
  936        *
  937        * @param domain Domain in which this name is to be created
  938        * @param group The Group to be named
  939        *
  940        * @exception MalformedObjectNameException if a name cannot be created
  941        */
  942       static ObjectName createObjectName(String domain,
  943                                                 Group group)
  944           throws MalformedObjectNameException {
  945   
  946           ObjectName name = null;
  947           name = new ObjectName(domain + ":type=Group,groupname=" +
  948                                 ObjectName.quote(group.getGroupname()) +
  949                                 ",database=" + group.getUserDatabase().getId());
  950           return (name);
  951   
  952       }
  953   
  954   
  955       /**
  956        * Create an <code>ObjectName</code> for this
  957        * <code>Host</code> object.
  958        *
  959        * @param domain Domain in which this name is to be created
  960        * @param host The Host to be named
  961        *
  962        * @exception MalformedObjectNameException if a name cannot be created
  963        */
  964       static ObjectName createObjectName(String domain,
  965                                                 Host host)
  966           throws MalformedObjectNameException {
  967   
  968           ObjectName name = null;
  969           Engine engine = (Engine)host.getParent();
  970           Service service = engine.getService();
  971           name = new ObjectName(domain + ":type=Host,host=" +
  972                                 host.getName());
  973           return (name);
  974   
  975       }
  976   
  977   
  978       /**
  979        * Create an <code>ObjectName</code> for this
  980        * <code>Loader</code> object.
  981        *
  982        * @param domain Domain in which this name is to be created
  983        * @param loader The Loader to be named
  984        *
  985        * @exception MalformedObjectNameException if a name cannot be created
  986        */
  987       static ObjectName createObjectName(String domain,
  988                                                 Loader loader)
  989           throws MalformedObjectNameException {
  990   
  991           ObjectName name = null;
  992           Container container = loader.getContainer();
  993   
  994           if (container instanceof Engine) {
  995               Service service = ((Engine)container).getService();
  996               name = new ObjectName(domain + ":type=Loader");
  997           } else if (container instanceof Host) {
  998               Engine engine = (Engine) container.getParent();
  999               Service service = engine.getService();
 1000               name = new ObjectName(domain + ":type=Loader,host=" +
 1001                                 container.getName());
 1002           } else if (container instanceof Context) {
 1003               String path = ((Context)container).getPath();
 1004               if (path.length() < 1) {
 1005                   path = "/";
 1006               }
 1007               Host host = (Host) container.getParent();
 1008               Engine engine = (Engine) host.getParent();
 1009               Service service = engine.getService();
 1010               name = new ObjectName(domain + ":type=Loader,path=" + path +
 1011                                 ",host=" + host.getName());
 1012           }
 1013   
 1014           return (name);
 1015   
 1016       }
 1017   
 1018   
 1019       /**
 1020        * Create an <code>ObjectName</code> for this
 1021        * <code>Manager</code> object.
 1022        *
 1023        * @param domain Domain in which this name is to be created
 1024        * @param manager The Manager to be named
 1025        *
 1026        * @exception MalformedObjectNameException if a name cannot be created
 1027        */
 1028       static ObjectName createObjectName(String domain,
 1029                                                 Manager manager)
 1030           throws MalformedObjectNameException {
 1031   
 1032           ObjectName name = null;
 1033           Container container = manager.getContainer();
 1034   
 1035           if (container instanceof Engine) {
 1036               Service service = ((Engine)container).getService();
 1037               name = new ObjectName(domain + ":type=Manager");
 1038           } else if (container instanceof Host) {
 1039               Engine engine = (Engine) container.getParent();
 1040               Service service = engine.getService();
 1041               name = new ObjectName(domain + ":type=Manager,host=" +
 1042                                 container.getName());
 1043           } else if (container instanceof Context) {
 1044               String path = ((Context)container).getPath();
 1045               if (path.length() < 1) {
 1046                   path = "/";
 1047               }
 1048               Host host = (Host) container.getParent();
 1049               Engine engine = (Engine) host.getParent();
 1050               Service service = engine.getService();
 1051               name = new ObjectName(domain + ":type=Manager,path=" + path +
 1052                                 ",host=" + host.getName());
 1053           }
 1054   
 1055           return (name);
 1056   
 1057       }
 1058       
 1059       
 1060       /**
 1061        * Create an <code>ObjectName</code> for this
 1062        * <code>Server</code> object.
 1063        *
 1064        * @param domain Domain in which this name is to be created
 1065        * @param resources The NamingResources to be named
 1066        *
 1067        * @exception MalformedObjectNameException if a name cannot be created
 1068        */
 1069       static ObjectName createObjectName(String domain,
 1070                                                 NamingResources resources)
 1071           throws MalformedObjectNameException {
 1072   
 1073           ObjectName name = null;
 1074           Object container = resources.getContainer();        
 1075           if (container instanceof Server) {        
 1076               name = new ObjectName(domain + ":type=NamingResources" + 
 1077                           ",resourcetype=Global");
 1078           } else if (container instanceof Context) {        
 1079               String path = ((Context)container).getPath();
 1080               if (path.length() < 1)
 1081                   path = "/";
 1082               Host host = (Host) ((Context)container).getParent();
 1083               Engine engine = (Engine) host.getParent();
 1084               Service service = engine.getService();
 1085               name = new ObjectName(domain + ":type=NamingResources" + 
 1086                           ",resourcetype=Context,path=" + path + 
 1087                           ",host=" + host.getName());
 1088           }
 1089           
 1090           return (name);
 1091   
 1092       }
 1093   
 1094   
 1095       /**
 1096        * Create an <code>ObjectName</code> for this
 1097        * <code>MBeanFactory</code> object.
 1098        *
 1099        * @param domain Domain in which this name is to be created
 1100        * @param factory The MBeanFactory to be named
 1101        *
 1102        * @exception MalformedObjectNameException if a name cannot be created
 1103        */
 1104       static ObjectName createObjectName(String domain,
 1105                                                 MBeanFactory factory)
 1106           throws MalformedObjectNameException {
 1107   
 1108           ObjectName name = new ObjectName(domain + ":type=MBeanFactory");
 1109   
 1110           return (name);
 1111   
 1112       }
 1113   
 1114       
 1115       /**
 1116        * Create an <code>ObjectName</code> for this
 1117        * <code>Realm</code> object.
 1118        *
 1119        * @param domain Domain in which this name is to be created
 1120        * @param realm The Realm to be named
 1121        *
 1122        * @exception MalformedObjectNameException if a name cannot be created
 1123        */
 1124       static ObjectName createObjectName(String domain,
 1125                                                 Realm realm)
 1126           throws MalformedObjectNameException {
 1127   
 1128           ObjectName name = null;
 1129           Container container = realm.getContainer();
 1130   
 1131           if (container instanceof Engine) {
 1132               Service service = ((Engine)container).getService();
 1133               name = new ObjectName(domain + ":type=Realm");
 1134           } else if (container instanceof Host) {
 1135               Engine engine = (Engine) container.getParent();
 1136               Service service = engine.getService();
 1137               name = new ObjectName(domain + ":type=Realm,host=" +
 1138                                 container.getName());
 1139           } else if (container instanceof Context) {
 1140               String path = ((Context)container).getPath();
 1141               if (path.length() < 1) {
 1142                   path = "/";
 1143               }
 1144               Host host = (Host) container.getParent();
 1145               Engine engine = (Engine) host.getParent();
 1146               Service service = engine.getService();
 1147               name = new ObjectName(domain + ":type=Realm,path=" + path +
 1148                                 ",host=" + host.getName());
 1149           }
 1150   
 1151           return (name);
 1152   
 1153       }
 1154   
 1155   
 1156       /**
 1157        * Create an <code>ObjectName</code> for this
 1158        * <code>Role</code> object.
 1159        *
 1160        * @param domain Domain in which this name is to be created
 1161        * @param role The Role to be named
 1162        *
 1163        * @exception MalformedObjectNameException if a name cannot be created
 1164        */
 1165       static ObjectName createObjectName(String domain,
 1166                                                 Role role)
 1167           throws MalformedObjectNameException {
 1168   
 1169           ObjectName name = null;
 1170           name = new ObjectName(domain + ":type=Role,rolename=" +
 1171                                 role.getRolename() + ",database=" +
 1172                                 role.getUserDatabase().getId());
 1173           return (name);
 1174   
 1175       }
 1176   
 1177   
 1178       /**
 1179        * Create an <code>ObjectName</code> for this
 1180        * <code>Server</code> object.
 1181        *
 1182        * @param domain Domain in which this name is to be created
 1183        * @param server The Server to be named
 1184        *
 1185        * @exception MalformedObjectNameException if a name cannot be created
 1186        */
 1187       static ObjectName createObjectName(String domain,
 1188                                                 Server server)
 1189           throws MalformedObjectNameException {
 1190   
 1191           ObjectName name = null;
 1192           name = new ObjectName(domain + ":type=Server");
 1193           return (name);
 1194   
 1195       }
 1196   
 1197   
 1198       /**
 1199        * Create an <code>ObjectName</code> for this
 1200        * <code>Service</code> object.
 1201        *
 1202        * @param domain Domain in which this name is to be created
 1203        * @param service The Service to be named
 1204        *
 1205        * @exception MalformedObjectNameException if a name cannot be created
 1206        */
 1207       static ObjectName createObjectName(String domain,
 1208                                                 Service service)
 1209           throws MalformedObjectNameException {
 1210   
 1211           ObjectName name = null;
 1212           name = new ObjectName(domain + ":type=Service,serviceName=" + 
 1213                               service.getName());
 1214           return (name);
 1215   
 1216       }
 1217   
 1218   
 1219       /**
 1220        * Create an <code>ObjectName</code> for this
 1221        * <code>User</code> object.
 1222        *
 1223        * @param domain Domain in which this name is to be created
 1224        * @param user The User to be named
 1225        *
 1226        * @exception MalformedObjectNameException if a name cannot be created
 1227        */
 1228       static ObjectName createObjectName(String domain,
 1229                                                 User user)
 1230           throws MalformedObjectNameException {
 1231   
 1232           ObjectName name = null;
 1233           name = new ObjectName(domain + ":type=User,username=" +
 1234                                 ObjectName.quote(user.getUsername())
 1235                                 + ",database=" + user.getUserDatabase().getId());
 1236           return (name);
 1237   
 1238       }
 1239   
 1240   
 1241       /**
 1242        * Create an <code>ObjectName</code> for this
 1243        * <code>UserDatabase</code> object.
 1244        *
 1245        * @param domain Domain in which this name is to be created
 1246        * @param userDatabase The UserDatabase to be named
 1247        *
 1248        * @exception MalformedObjectNameException if a name cannot be created
 1249        */
 1250       static ObjectName createObjectName(String domain,
 1251                                                 UserDatabase userDatabase)
 1252           throws MalformedObjectNameException {
 1253   
 1254           ObjectName name = null;
 1255           name = new ObjectName(domain + ":type=UserDatabase,database=" +
 1256                                 userDatabase.getId());
 1257           return (name);
 1258   
 1259       }
 1260   
 1261   
 1262       /**
 1263        * Create an <code>ObjectName</code> for this
 1264        * <code>Valve</code> object.
 1265        *
 1266        * @param domain Domain in which this name is to be created
 1267        * @param valve The Valve to be named
 1268        *
 1269        * @exception MalformedObjectNameException if a name cannot be created
 1270        */
 1271       static ObjectName createObjectName(String domain,
 1272                                          Valve valve)
 1273           throws MalformedObjectNameException {
 1274           if( valve instanceof ValveBase ) {
 1275               ObjectName name=((ValveBase)valve).getObjectName();
 1276               if( name != null )
 1277                   return name;
 1278           }
 1279   
 1280           ObjectName name = null;
 1281           Container container = null;
 1282           String className=valve.getClass().getName();
 1283           int period = className.lastIndexOf('.');
 1284           if (period >= 0)
 1285               className = className.substring(period + 1);
 1286           if( valve instanceof Contained ) {
 1287               container = ((Contained)valve).getContainer();
 1288           }
 1289           if( container == null ) {
 1290               throw new MalformedObjectNameException(
 1291                                  "Cannot create mbean for non-contained valve " +
 1292                                  valve);
 1293           }        
 1294           if (container instanceof Engine) {
 1295               Service service = ((Engine)container).getService();
 1296               String local="";
 1297               int seq = getSeq(local);
 1298               String ext="";
 1299               if( seq > 0 ) {
 1300                   ext=",seq=" + seq;
 1301               }
 1302               name = new ObjectName(domain + ":type=Valve,name=" + className + 
 1303                                       ext + local );
 1304           } else if (container instanceof Host) {
 1305               Service service = ((Engine)container.getParent()).getService();
 1306               String local=",host=" +container.getName();
 1307               int seq = getSeq(local);
 1308               String ext="";
 1309               if( seq > 0 ) {
 1310                   ext=",seq=" + seq;
 1311               }
 1312               name = new ObjectName(domain + ":type=Valve,name=" + className + 
 1313                                       ext + local );
 1314           } else if (container instanceof Context) {
 1315               String path = ((Context)container).getPath();
 1316               if (path.length() < 1) {
 1317                   path = "/";
 1318               }
 1319               Host host = (Host) container.getParent();
 1320               Service service = ((Engine) host.getParent()).getService();
 1321               String local=",path=" + path + ",host=" +
 1322                       host.getName();
 1323               int seq = getSeq(local);
 1324               String ext="";
 1325               if( seq > 0 ) {
 1326                   ext=",seq=" + seq;
 1327               }
 1328               name = new ObjectName(domain + ":type=Valve,name=" + className + 
 1329                                       ext + local );
 1330           }
 1331   
 1332           return (name);
 1333   
 1334       }
 1335   
 1336       static Hashtable seq=new Hashtable();
 1337       static int getSeq( String key ) {
 1338           int i[]=(int [])seq.get( key );
 1339           if (i == null ) {
 1340               i=new int[1];
 1341               i[0]=0;
 1342               seq.put( key, i);
 1343           } else {
 1344               i[0]++;
 1345           }
 1346           return i[0];
 1347       }
 1348   
 1349       /**
 1350        * Create and configure (if necessary) and return the registry of
 1351        * managed object descriptions.
 1352        */
 1353       public synchronized static Registry createRegistry() {
 1354   
 1355           if (registry == null) {
 1356               registry = Registry.getRegistry(null, null);
 1357               ClassLoader cl=ServerLifecycleListener.class.getClassLoader();
 1358   
 1359               registry.loadDescriptors("org.apache.catalina.mbeans",  cl);
 1360               registry.loadDescriptors("org.apache.catalina.authenticator", cl);
 1361               registry.loadDescriptors("org.apache.catalina.core", cl);
 1362               registry.loadDescriptors("org.apache.catalina", cl);
 1363               registry.loadDescriptors("org.apache.catalina.deploy", cl);
 1364               registry.loadDescriptors("org.apache.catalina.loader", cl);
 1365               registry.loadDescriptors("org.apache.catalina.realm", cl);
 1366               registry.loadDescriptors("org.apache.catalina.session", cl);
 1367               registry.loadDescriptors("org.apache.catalina.startup", cl);
 1368               registry.loadDescriptors("org.apache.catalina.users", cl);
 1369               registry.loadDescriptors("org.apache.catalina.ha", cl);
 1370               registry.loadDescriptors("org.apache.catalina.connector", cl);
 1371               registry.loadDescriptors("org.apache.catalina.valves",  cl);
 1372           }
 1373           return (registry);
 1374   
 1375       }
 1376   
 1377   
 1378       /**
 1379        * Create and configure (if necessary) and return the
 1380        * <code>MBeanServer</code> with which we will be
 1381        * registering our <code>DynamicMBean</code> implementations.
 1382        */
 1383       public synchronized static MBeanServer createServer() {
 1384   
 1385           if (mserver == null) {
 1386               try {
 1387                   mserver = Registry.getRegistry(null, null).getMBeanServer();
 1388               } catch (Throwable t) {
 1389                   t.printStackTrace(System.out);
 1390                   System.exit(1);
 1391               }
 1392           }
 1393           return (mserver);
 1394   
 1395       }
 1396   
 1397   
 1398       /**
 1399        * Deregister the MBean for this
 1400        * <code>Connector</code> object.
 1401        *
 1402        * @param connector The Connector to be managed
 1403        *
 1404        * @exception Exception if an MBean cannot be deregistered
 1405        */
 1406       static void destroyMBean(Connector connector, Service service)
 1407           throws Exception {
 1408   
 1409           connector.setService(service);
 1410           String mname = createManagedName(connector);
 1411           ManagedBean managed = registry.findManagedBean(mname);
 1412           if (managed == null) {
 1413               return;
 1414           }
 1415           String domain = managed.getDomain();
 1416           if (domain == null)
 1417               domain = mserver.getDefaultDomain();
 1418           ObjectName oname = createObjectName(domain, connector);
 1419           connector.setService(null);
 1420           if( mserver.isRegistered( oname ))  {
 1421               mserver.unregisterMBean(oname);
 1422           }
 1423       }
 1424   
 1425   
 1426       /**
 1427        * Deregister the MBean for this
 1428        * <code>Context</code> object.
 1429        *
 1430        * @param context The Context to be managed
 1431        *
 1432        * @exception Exception if an MBean cannot be deregistered
 1433        */
 1434       static void destroyMBean(Context context)
 1435           throws Exception {
 1436   
 1437           String mname = createManagedName(context);
 1438           ManagedBean managed = registry.findManagedBean(mname);
 1439           if (managed == null) {
 1440               return;
 1441           }
 1442           String domain = managed.getDomain();
 1443           if (domain == null)
 1444               domain = mserver.getDefaultDomain();
 1445           ObjectName oname = createObjectName(domain, context);
 1446           if( mserver.isRegistered(oname) )
 1447               mserver.unregisterMBean(oname);
 1448   
 1449       }
 1450   
 1451       
 1452       /**
 1453        * Deregister the MBean for this
 1454        * <code>ContextEnvironment</code> object.
 1455        *
 1456        * @param environment The ContextEnvironment to be managed
 1457        *
 1458        * @exception Exception if an MBean cannot be deregistered
 1459        */
 1460       static void destroyMBean(ContextEnvironment environment)
 1461           throws Exception {
 1462   
 1463           String mname = createManagedName(environment);
 1464           ManagedBean managed = registry.findManagedBean(mname);
 1465           if (managed == null) {
 1466               return;
 1467           }
 1468           String domain = managed.getDomain();
 1469           if (domain == null)
 1470               domain = mserver.getDefaultDomain();
 1471           ObjectName oname = createObjectName(domain, environment);
 1472           if( mserver.isRegistered(oname) )
 1473               mserver.unregisterMBean(oname);
 1474   
 1475       }
 1476       
 1477       
 1478       /**
 1479        * Deregister the MBean for this
 1480        * <code>ContextResource</code> object.
 1481        *
 1482        * @param resource The ContextResource to be managed
 1483        *
 1484        * @exception Exception if an MBean cannot be deregistered
 1485        */
 1486       static void destroyMBean(ContextResource resource)
 1487           throws Exception {
 1488   
 1489           String mname = createManagedName(resource);
 1490           ManagedBean managed = registry.findManagedBean(mname);
 1491           if (managed == null) {
 1492               return;
 1493           }
 1494           String domain = managed.getDomain();
 1495           if (domain == null)
 1496               domain = mserver.getDefaultDomain();
 1497           ObjectName oname = createObjectName(domain, resource);
 1498           if( mserver.isRegistered(oname ))
 1499               mserver.unregisterMBean(oname);
 1500   
 1501       }
 1502        
 1503       
 1504       /**
 1505        * Deregister the MBean for this
 1506        * <code>ContextResourceLink</code> object.
 1507        *
 1508        * @param resourceLink The ContextResourceLink to be managed
 1509        *
 1510        * @exception Exception if an MBean cannot be deregistered
 1511        */
 1512       static void destroyMBean(ContextResourceLink resourceLink)
 1513           throws Exception {
 1514   
 1515           String mname = createManagedName(resourceLink);
 1516           ManagedBean managed = registry.findManagedBean(mname);
 1517           if (managed == null) {
 1518               return;
 1519           }
 1520           String domain = managed.getDomain();
 1521           if (domain == null)
 1522               domain = mserver.getDefaultDomain();
 1523           ObjectName oname = createObjectName(domain, resourceLink);
 1524           if( mserver.isRegistered(oname) )
 1525               mserver.unregisterMBean(oname);
 1526   
 1527       }   
 1528       
 1529       /**
 1530        * Deregister the MBean for this
 1531        * <code>Engine</code> object.
 1532        *
 1533        * @param engine The Engine to be managed
 1534        *
 1535        * @exception Exception if an MBean cannot be deregistered
 1536        */
 1537       static void destroyMBean(Engine engine)
 1538           throws Exception {
 1539   
 1540           String mname = createManagedName(engine);
 1541           ManagedBean managed = registry.findManagedBean(mname);
 1542           if (managed == null) {
 1543               return;
 1544           }
 1545           String domain = managed.getDomain();
 1546           if (domain == null)
 1547               domain = mserver.getDefaultDomain();
 1548           ObjectName oname = createObjectName(domain, engine);
 1549           if( mserver.isRegistered(oname) )
 1550               mserver.unregisterMBean(oname);
 1551   
 1552       }
 1553   
 1554   
 1555       /**
 1556        * Deregister the MBean for this
 1557        * <code>Group</code> object.
 1558        *
 1559        * @param group The Group to be managed
 1560        *
 1561        * @exception Exception if an MBean cannot be deregistered
 1562        */
 1563       static void destroyMBean(Group group)
 1564           throws Exception {
 1565   
 1566           String mname = createManagedName(group);
 1567           ManagedBean managed = registry.findManagedBean(mname);
 1568           if (managed == null) {
 1569               return;
 1570           }
 1571           String domain = managed.getDomain();
 1572           if (domain == null)
 1573               domain = mserver.getDefaultDomain();
 1574           ObjectName oname = createObjectName(domain, group);
 1575           if( mserver.isRegistered(oname) )
 1576               mserver.unregisterMBean(oname);
 1577   
 1578       }
 1579   
 1580   
 1581       /**
 1582        * Deregister the MBean for this
 1583        * <code>Host</code> object.
 1584        *
 1585        * @param host The Host to be managed
 1586        *
 1587        * @exception Exception if an MBean cannot be deregistered
 1588        */
 1589       static void destroyMBean(Host host)
 1590           throws Exception {
 1591   
 1592           String mname = createManagedName(host);
 1593           ManagedBean managed = registry.findManagedBean(mname);
 1594           if (managed == null) {
 1595               return;
 1596           }
 1597           String domain = managed.getDomain();
 1598           if (domain == null)
 1599               domain = mserver.getDefaultDomain();
 1600           ObjectName oname = createObjectName(domain, host);
 1601           if( mserver.isRegistered(oname) )
 1602               mserver.unregisterMBean(oname);
 1603   
 1604       }
 1605   
 1606   
 1607       /**
 1608        * Deregister the MBean for this
 1609        * <code>Loader</code> object.
 1610        *
 1611        * @param loader The Loader to be managed
 1612        *
 1613        * @exception Exception if an MBean cannot be deregistered
 1614        */
 1615       static void destroyMBean(Loader loader)
 1616           throws Exception {
 1617   
 1618           String mname = createManagedName(loader);
 1619           ManagedBean managed = registry.findManagedBean(mname);
 1620           if (managed == null) {
 1621               return;
 1622           }
 1623           String domain = managed.getDomain();
 1624           if (domain == null)
 1625               domain = mserver.getDefaultDomain();
 1626           ObjectName oname = createObjectName(domain, loader);
 1627           if( mserver.isRegistered(oname) )
 1628               mserver.unregisterMBean(oname);
 1629   
 1630       }
 1631   
 1632   
 1633       /**
 1634        * Deregister the MBean for this
 1635        * <code>Manager</code> object.
 1636        *
 1637        * @param manager The Manager to be managed
 1638        *
 1639        * @exception Exception if an MBean cannot be deregistered
 1640        */
 1641       static void destroyMBean(Manager manager)
 1642           throws Exception {
 1643   
 1644           String mname = createManagedName(manager);
 1645           ManagedBean managed = registry.findManagedBean(mname);
 1646           if (managed == null) {
 1647               return;
 1648           }
 1649           String domain = managed.getDomain();
 1650           if (domain == null)
 1651               domain = mserver.getDefaultDomain();
 1652           ObjectName oname = createObjectName(domain, manager);
 1653           if( mserver.isRegistered(oname) )
 1654               mserver.unregisterMBean(oname);
 1655   
 1656       }
 1657       
 1658       
 1659      /**
 1660        * Deregister the MBean for this
 1661        * <code>NamingResources</code> object.
 1662        *
 1663        * @param resources The NamingResources to be managed
 1664        *
 1665        * @exception Exception if an MBean cannot be deregistered
 1666        */
 1667       static void destroyMBean(NamingResources resources)
 1668           throws Exception {
 1669   
 1670           String mname = createManagedName(resources);
 1671           ManagedBean managed = registry.findManagedBean(mname);
 1672           if (managed == null) {
 1673               return;
 1674           }
 1675           String domain = managed.getDomain();
 1676           if (domain == null)
 1677               domain = mserver.getDefaultDomain();
 1678           ObjectName oname = createObjectName(domain, resources);
 1679          if( mserver.isRegistered(oname) )
 1680               mserver.unregisterMBean(oname);
 1681   
 1682       }
 1683       
 1684       
 1685       /**
 1686        * Deregister the MBean for this
 1687        * <code>Realm</code> object.
 1688        *
 1689        * @param realm The Realm to be managed
 1690        *
 1691        * @exception Exception if an MBean cannot be deregistered
 1692        */
 1693       static void destroyMBean(Realm realm)
 1694           throws Exception {
 1695   
 1696           String mname = createManagedName(realm);
 1697           ManagedBean managed = registry.findManagedBean(mname);
 1698           if (managed == null) {
 1699               return;
 1700           }
 1701           String domain = managed.getDomain();
 1702           if (domain == null)
 1703               domain = mserver.getDefaultDomain();
 1704           ObjectName oname = createObjectName(domain, realm);
 1705           if( mserver.isRegistered(oname) )
 1706               mserver.unregisterMBean(oname);
 1707   
 1708       }
 1709   
 1710   
 1711       /**
 1712        * Deregister the MBean for this
 1713        * <code>Role</code> object.
 1714        *
 1715        * @param role The Role to be managed
 1716        *
 1717        * @exception Exception if an MBean cannot be deregistered
 1718        */
 1719       static void destroyMBean(Role role)
 1720           throws Exception {
 1721   
 1722           String mname = createManagedName(role);
 1723           ManagedBean managed = registry.findManagedBean(mname);
 1724           if (managed == null) {
 1725               return;
 1726           }
 1727           String domain = managed.getDomain();
 1728           if (domain == null)
 1729               domain = mserver.getDefaultDomain();
 1730           ObjectName oname = createObjectName(domain, role);
 1731           if( mserver.isRegistered(oname) )
 1732               mserver.unregisterMBean(oname);
 1733   
 1734       }
 1735   
 1736   
 1737       /**
 1738        * Deregister the MBean for this
 1739        * <code>Server</code> object.
 1740        *
 1741        * @param server The Server to be managed
 1742        *
 1743        * @exception Exception if an MBean cannot be deregistered
 1744        */
 1745       static void destroyMBean(Server server)
 1746           throws Exception {
 1747   
 1748           String mname = createManagedName(server);
 1749           ManagedBean managed = registry.findManagedBean(mname);
 1750           if (managed == null) {
 1751               return;
 1752           }
 1753           String domain = managed.getDomain();
 1754           if (domain == null)
 1755               domain = mserver.getDefaultDomain();
 1756           ObjectName oname = createObjectName(domain, server);
 1757           if( mserver.isRegistered(oname) )
 1758               mserver.unregisterMBean(oname);
 1759   
 1760       }
 1761   
 1762   
 1763       /**
 1764        * Deregister the MBean for this
 1765        * <code>Service</code> object.
 1766        *
 1767        * @param service The Service to be managed
 1768        *
 1769        * @exception Exception if an MBean cannot be deregistered
 1770        */
 1771       static void destroyMBean(Service service)
 1772           throws Exception {
 1773   
 1774           String mname = createManagedName(service);
 1775           ManagedBean managed = registry.findManagedBean(mname);
 1776           if (managed == null) {
 1777               return;
 1778           }
 1779           String domain = managed.getDomain();
 1780           if (domain == null)
 1781               domain = mserver.getDefaultDomain();
 1782           ObjectName oname = createObjectName(domain, service);
 1783           if( mserver.isRegistered(oname) )
 1784               mserver.unregisterMBean(oname);
 1785   
 1786       }
 1787   
 1788   
 1789       /**
 1790        * Deregister the MBean for this
 1791        * <code>User</code> object.
 1792        *
 1793        * @param user The User to be managed
 1794        *
 1795        * @exception Exception if an MBean cannot be deregistered
 1796        */
 1797       static void destroyMBean(User user)
 1798           throws Exception {
 1799   
 1800           String mname = createManagedName(user);
 1801           ManagedBean managed = registry.findManagedBean(mname);
 1802           if (managed == null) {
 1803               return;
 1804           }
 1805           String domain = managed.getDomain();
 1806           if (domain == null)
 1807               domain = mserver.getDefaultDomain();
 1808           ObjectName oname = createObjectName(domain, user);
 1809           if( mserver.isRegistered(oname) )
 1810               mserver.unregisterMBean(oname);
 1811   
 1812       }
 1813   
 1814   
 1815       /**
 1816        * Deregister the MBean for this
 1817        * <code>UserDatabase</code> object.
 1818        *
 1819        * @param userDatabase The UserDatabase to be managed
 1820        *
 1821        * @exception Exception if an MBean cannot be deregistered
 1822        */
 1823       static void destroyMBean(UserDatabase userDatabase)
 1824           throws Exception {
 1825   
 1826           String mname = createManagedName(userDatabase);
 1827           ManagedBean managed = registry.findManagedBean(mname);
 1828           if (managed == null) {
 1829               return;
 1830           }
 1831           String domain = managed.getDomain();
 1832           if (domain == null)
 1833               domain = mserver.getDefaultDomain();
 1834           ObjectName oname = createObjectName(domain, userDatabase);
 1835           if( mserver.isRegistered(oname) )
 1836               mserver.unregisterMBean(oname);
 1837   
 1838       }
 1839   
 1840   
 1841       /**
 1842        * Deregister the MBean for this
 1843        * <code>Valve</code> object.
 1844        *
 1845        * @param valve The Valve to be managed
 1846        *
 1847        * @exception Exception if an MBean cannot be deregistered
 1848        */
 1849       static void destroyMBean(Valve valve, Container container)
 1850           throws Exception {
 1851   
 1852           ((Contained)valve).setContainer(container);
 1853           String mname = createManagedName(valve);
 1854           ManagedBean managed = registry.findManagedBean(mname);
 1855           if (managed == null) {
 1856               return;
 1857           }
 1858           String domain = managed.getDomain();
 1859           if (domain == null)
 1860               domain = mserver.getDefaultDomain();
 1861           ObjectName oname = createObjectName(domain, valve);
 1862           try {
 1863               ((Contained)valve).setContainer(null);
 1864           } catch (Throwable t) {
 1865           ;
 1866           }
 1867           if( mserver.isRegistered(oname) ) {
 1868               mserver.unregisterMBean(oname);
 1869           }
 1870   
 1871       }
 1872   
 1873   }

Save This Page
Home » Tomcat-6.0.20 » org.apache » catalina » mbeans » [javadoc | source]