svn commit: r1846112 - in /tomcat/trunk/java/org/apache/catalina: Container.java util/LifecycleMBeanBase.java

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1846112 - in /tomcat/trunk/java/org/apache/catalina: Container.java util/LifecycleMBeanBase.java

Rémy Maucherat
Author: remm
Date: Thu Nov  8 10:10:00 2018
New Revision: 1846112

URL: http://svn.apache.org/viewvc?rev=1846112&view=rev
Log:
Add a few additional utility methods to reduce code duplication: get the default config path of a container, unregister bean based on properties and get the Service.

Modified:
    tomcat/trunk/java/org/apache/catalina/Container.java
    tomcat/trunk/java/org/apache/catalina/util/LifecycleMBeanBase.java

Modified: tomcat/trunk/java/org/apache/catalina/Container.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Container.java?rev=1846112&r1=1846111&r2=1846112&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Container.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Container.java Thu Nov  8 10:10:00 2018
@@ -297,6 +297,56 @@ public interface Container extends Lifec
     public void setRealm(Realm realm);
 
 
+    /**
+     * Find the configuration path where a configuration resource
+     * is located.
+     * @param container The container
+     * @param resourceName The resource file name
+     * @return the configuration path
+     */
+    public static String getConfigPath(Container container, String resourceName) {
+        StringBuffer result = new StringBuffer();
+        Container host = null;
+        Container engine = null;
+        while (container != null) {
+            if (container instanceof Host) {
+                host = container;
+            } else if (container instanceof Engine) {
+                engine = container;
+            }
+            container = container.getParent();
+        }
+        if (host != null && ((Host) host).getXmlBase() != null) {
+            result.append(((Host) host).getXmlBase()).append('/');
+        } else {
+            if (engine != null) {
+                result.append(engine.getName()).append('/');
+            }
+            if (host != null) {
+                result.append(host.getName()).append('/');
+            }
+        }
+        result.append(resourceName);
+        return result.toString();
+    }
+
+
+    /**
+     * Return the Service to which this container belongs.
+     * @param container The container to start from
+     * @return the Service, or null if not found
+     */
+    public static Service getService(Container container) {
+        while (container != null && !(container instanceof Engine)) {
+            container = container.getParent();
+        }
+        if (container == null) {
+            return null;
+        }
+        return ((Engine) container).getService();
+    }
+
+
     // --------------------------------------------------------- Public Methods
 
 

Modified: tomcat/trunk/java/org/apache/catalina/util/LifecycleMBeanBase.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/util/LifecycleMBeanBase.java?rev=1846112&r1=1846111&r2=1846112&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/util/LifecycleMBeanBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/util/LifecycleMBeanBase.java Thu Nov  8 10:10:00 2018
@@ -178,6 +178,36 @@ public abstract class LifecycleMBeanBase
      * Note: This method should only be used once {@link #initInternal()} has
      * been called and before {@link #destroyInternal()} has been called.
      *
+     * @param objectNameKeyProperties   The key properties component of the
+     *                                  object name to use to unregister the
+     *                                  object
+     */
+    protected final void unregister(String objectNameKeyProperties) {
+        // Construct an object name with the right domain
+        StringBuilder name = new StringBuilder(getDomain());
+        name.append(':');
+        name.append(objectNameKeyProperties);
+
+        ObjectName on = null;
+
+        try {
+            on = new ObjectName(name.toString());
+            Registry.getRegistry(null, null).unregisterComponent(on);
+        } catch (MalformedObjectNameException e) {
+            log.warn(sm.getString("lifecycleMBeanBase.unregisterFail", name), e);
+        } catch (Exception e) {
+            log.warn(sm.getString("lifecycleMBeanBase.unregisterFail", name), e);
+        }
+    }
+
+
+    /**
+     * Utility method to enable sub-classes to easily unregister additional
+     * components that don't implement {@link JmxEnabled} with an MBean server.
+     * <br>
+     * Note: This method should only be used once {@link #initInternal()} has
+     * been called and before {@link #destroyInternal()} has been called.
+     *
      * @param on    The name of the component to unregister
      */
     protected final void unregister(ObjectName on) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]