You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ps...@apache.org on 2008/08/15 05:31:31 UTC

svn commit: r686131 - in /logging/log4j/trunk/src: changes/ main/java/org/apache/log4j/jmx/

Author: psmith
Date: Thu Aug 14 20:31:30 2008
New Revision: 686131

URL: http://svn.apache.org/viewvc?rev=686131&view=rev
Log:
Bug 40246 Added cleaned up patch provided by wing tung Leung to allow the JMX Beans created to properly deregister, allowing
Servlet Containers that shutdown/restart to be able to (re)register new JMX beans of the same name.


Modified:
    logging/log4j/trunk/src/changes/changes.xml
    logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AbstractDynamicMBean.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AppenderDynamicMBean.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/HierarchyDynamicMBean.java
    logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/LoggerDynamicMBean.java

Modified: logging/log4j/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/changes/changes.xml?rev=686131&r1=686130&r2=686131&view=diff
==============================================================================
--- logging/log4j/trunk/src/changes/changes.xml (original)
+++ logging/log4j/trunk/src/changes/changes.xml Thu Aug 14 20:31:30 2008
@@ -56,6 +56,7 @@
        <action action="fix" issue="40888">Weekly rotation problem in Europe.</action>
        <action action="fix" issue="43282">Add OSGi packaging info.</action>
        <action action="fix" issue="44157">InterruptedIOException ignored by log4j.</action>
+       <action action="fix" issue="40246">HierarchyDynamicMBean missing unregister MBean</action>
     </release>
   
     <release version="1.2.15" date="2007-08-24" description="SyslogAppender enhancements, NTEventLogAppender and Maven build.">

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AbstractDynamicMBean.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AbstractDynamicMBean.java?rev=686131&r1=686130&r2=686131&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AbstractDynamicMBean.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AbstractDynamicMBean.java Thu Aug 14 20:31:30 2008
@@ -17,25 +17,31 @@
 
 package org.apache.log4j.jmx;
 
-//import java.lang.reflect.Constructor;
-
-import org.apache.log4j.Logger;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.Vector;
 
 import javax.management.Attribute;
 import javax.management.AttributeList;
 import javax.management.DynamicMBean;
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
 import javax.management.JMException;
 import javax.management.MBeanRegistration;
+import javax.management.MBeanRegistrationException;
 import javax.management.MBeanServer;
+import javax.management.NotCompliantMBeanException;
 import javax.management.ObjectName;
 import javax.management.RuntimeOperationsException;
-import java.util.Iterator;
+
+import org.apache.log4j.Logger;
 
 public abstract class AbstractDynamicMBean implements DynamicMBean,
                                                       MBeanRegistration {
 
   String dClassName;
   MBeanServer server;
+  private final Vector mbeanList = new Vector();
 
   /**
    * Enables the to get the values of several attributes of the Dynamic MBean.
@@ -121,17 +127,44 @@
 
 
   public
-  void preDeregister() {
-    getLogger().debug("preDeregister called.");
-  }
-
-  public
   ObjectName preRegister(MBeanServer server, ObjectName name) {
     getLogger().debug("preRegister called. Server="+server+ ", name="+name);
     this.server = server;
     return name;
   }
+  /**
+   * Registers MBean instance in the attached server. Must <em>NOT</em>
+   * be called before registration of this instance.
+   */
+  protected
+  void registerMBean(Object mbean, ObjectName objectName)
+  throws InstanceAlreadyExistsException, MBeanRegistrationException,
+                   NotCompliantMBeanException {
+    server.registerMBean(mbean, objectName);
+    mbeanList.add(objectName);
+  }
 
+  /**
+   * Performs cleanup for deregistering this MBean. Default implementation
+   * unregisters MBean instances which are registered using 
+   * {@link #registerMBean(Object mbean, ObjectName objectName)}.
+   */
+   public
+   void preDeregister() {
+     getLogger().debug("preDeregister called.");
+     
+    Enumeration iterator = mbeanList.elements();
+    while (iterator.hasMoreElements()) {
+      ObjectName name = (ObjectName) iterator.nextElement();
+      try {
+        server.unregisterMBean(name);
+      } catch (InstanceNotFoundException e) {
+   getLogger().warn("Missing MBean " + name.getCanonicalName());
+      } catch (MBeanRegistrationException e) {
+   getLogger().warn("Failed unregistering " + name.getCanonicalName());
+      }
+    }
+   }
 
 
 }

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AppenderDynamicMBean.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AppenderDynamicMBean.java?rev=686131&r1=686130&r2=686131&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AppenderDynamicMBean.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/AppenderDynamicMBean.java Thu Aug 14 20:31:30 2008
@@ -199,7 +199,7 @@
       LayoutDynamicMBean appenderMBean = new LayoutDynamicMBean(layout);
       objectName = new ObjectName("log4j:appender="+name);
       if (!server.isRegistered(objectName)) {
-        server.registerMBean(appenderMBean, objectName);
+        registerMBean(appenderMBean, objectName);
         dAttributes.add(new MBeanAttributeInfo("appender=" + name, "javax.management.ObjectName",
                 "The " + name + " layout.", true, true, false));
       }

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/HierarchyDynamicMBean.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/HierarchyDynamicMBean.java?rev=686131&r1=686130&r2=686131&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/HierarchyDynamicMBean.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/HierarchyDynamicMBean.java Thu Aug 14 20:31:30 2008
@@ -122,7 +122,7 @@
       objectName = new ObjectName("log4j", "logger", name);
       
       if (!server.isRegistered(objectName)) {
-        server.registerMBean(loggerMBean, objectName);
+        registerMBean(loggerMBean, objectName);
         NotificationFilterSupport nfs = new NotificationFilterSupport();
         nfs.enableType(ADD_APPENDER + logger.getName());
         log.debug("---Adding logger [" + name + "] as listener.");

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/LoggerDynamicMBean.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/LoggerDynamicMBean.java?rev=686131&r1=686130&r2=686131&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/LoggerDynamicMBean.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/jmx/LoggerDynamicMBean.java Thu Aug 14 20:31:30 2008
@@ -262,7 +262,7 @@
       AppenderDynamicMBean appenderMBean = new AppenderDynamicMBean(appender);
       objectName = new ObjectName("log4j", "appender", name);
       if (!server.isRegistered(objectName)) {
-        server.registerMBean(appenderMBean, objectName);
+        registerMBean(appenderMBean, objectName);
         dAttributes.add(new MBeanAttributeInfo("appender=" + name, "javax.management.ObjectName",
                 "The " + name + " appender.", true, true, false));
       }



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org