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