r500491 | eross | 2007-01-27 00:53:42 -0600 (Sat, 27 Jan 2007) | 2 lines
Bug 40251 - Register generated MBeans in the same domain as the
parent MBean is in
Add unit test to see this works -- why wasn't there any test?
Index: src/java/org/apache/log4j/jmx/AppenderDynamicMBean.java
===================================================================
191d190
< ObjectName objectName = null;
194,195c193,194
< objectName = new ObjectName("log4j:appender="+name);
< server.registerMBean(appenderMBean, objectName);
---
> ObjectName objectName = new ObjectName(getObjectName
().getDomain(), "appender", name);
> getServer().registerMBean(appenderMBean, objectName);
230c229
< return new ObjectName("log4j:"+attributeName );
---
> return new ObjectName(getObjectName().getDomain() + ":" +
attributeName);
310,312c309,310
< ObjectName preRegister(MBeanServer server, ObjectName name) {
< cat.debug("preRegister called. Server="+server+ ", name="+name);
< this.server = server;
---
> ObjectName preRegister(MBeanServer server, ObjectName objectName) {
> super.preRegister(server, objectName);
314,315c312
<
< return name;
---
> return objectName;
Index: src/java/org/apache/log4j/jmx/HierarchyDynamicMBean.java
===================================================================
23c23
< import org.apache.log4j.spi.HierarchyEventListener;
---
> import org.apache.log4j.spi.LoggerEventListener;
24a25
> import org.apache.log4j.spi.LoggerRepositoryEx;
26a28
> import java.util.Enumeration;
52c54
< implements HierarchyEventListener,
---
> implements LoggerEventListener,
55,56c57,61
< static final String ADD_APPENDER = "addAppender.";
< static final String THRESHOLD = "threshold";
---
> private static Logger log = Logger.getLogger
(HierarchyDynamicMBean.class);
>
> private static final String ADD_APPENDER = "addAppender.";
> private static final String REMOVE_APPENDER = "removeAppender.";
> private static final String THRESHOLD = "threshold";
59c64
< private MBeanOperationInfo[] dOperations = new MBeanOperationInfo
[1];
---
> private MBeanOperationInfo[] dOperations = new MBeanOperationInfo
[2];
67,68d71
<
<
71,72d73
< private static Logger log = Logger.getLogger
(HierarchyDynamicMBean.class);
<
96c97
< "addLoggerMBean(): add a loggerMBean",
---
> "add a loggerMBean",
100,101c101,105
< }
<
---
> dOperations[1] = new MBeanOperationInfo("addLoggerMBeans",
> "add a loggerMBean for all loggers",
> new MBeanParameterInfo[0],
> null,
> MBeanOperationInfo.ACTION);
103,105c107
< public
< ObjectName addLoggerMBean(String name) {
< Logger cat = LogManager.exists(name);
---
> }
107,108c109,117
< if(cat != null) {
< return addLoggerMBean(cat);
---
> /**
> * Adds a logger MBean, returning a new [EMAIL PROTECTED] ObjectName} or
returning null if the logger does not exist.
> * @param name name of the logger.
> * @return
> */
> public ObjectName addLoggerMBean(String name) {
> Logger log = LogManager.exists(name);
> if (log != null) {
> return addLoggerMBean(log);
114c123,138
< ObjectName addLoggerMBean(Logger logger) {
---
> /**
> * Adds a logger MBean for all loggers.
> */
> public
> void addLoggerMBeans() {
> Enumeration e = hierarchy.getCurrentLoggers();
> while (e.hasMoreElements()) {
> Logger l = (Logger)e.nextElement();
> addLoggerMBean(l);
> }
> }
>
> /**
> * Adds a logger MBean by Logger, returning a new registered MBean.
> */
> public ObjectName addLoggerMBean(Logger logger) {
119,120c143,144
< objectName = new ObjectName("log4j", "logger", name);
< server.registerMBean(loggerMBean, objectName);
---
> objectName = new ObjectName(getObjectName().getDomain(),
"logger", name);
> getServer().registerMBean(loggerMBean, objectName);
190a215,217
> } else if (operationName.equals("addLoggerMBeans")) {
> addLoggerMBeans();
> return null;
237a265,267
> public void levelChangedEvent(Logger logger) {
> // TODO Auto-generated method stub
> }
239,240c269
< public
< void addAppenderEvent(Category logger, Appender appender) {
---
> public void appenderAddedEvent(Logger logger, Appender appender) {
249,251c278,279
< public
< void removeAppenderEvent(Category cat, Appender appender) {
< log.debug("removeAppenderCalled: logger="+cat.getName()+
---
> public void appenderRemovedEvent(Logger logger, Appender
appender) {
> log.debug("removeAppenderCalled: logger=" + logger.getName()+
252a281,284
> Notification n = new Notification(REMOVE_APPENDER
+logger.getName(), this, 0);
> n.setUserData(appender);
> log.debug("sending notification.");
> nbs.sendNotification(n);
258c290
< hierarchy.addHierarchyEventListener(this);
---
> ((LoggerRepositoryEx)hierarchy).addLoggerEventListener(this);
296,297d327
<
<
298a329
>
Index: src/java/org/apache/log4j/jmx/LoggerDynamicMBean.java
===================================================================
72,73d71
<
<
175c173
< return new ObjectName("log4j:"+attributeName );
---
> return new ObjectName(getObjectName().getDomain() + ":" +
attributeName);
254a253,254
> if (name == null)
> name = appender.toString();
259,260c259,260
< objectName = new ObjectName("log4j", "appender", name);
< server.registerMBean(appenderMBean, objectName);
---
> objectName = new ObjectName(getObjectName().getDomain(),
"appender", name);
> getServer().registerMBean(appenderMBean, objectName);
Index: src/java/org/apache/log4j/jmx/AbstractDynamicMBean.java
===================================================================
34c34,41
< MBeanServer server;
---
>
> /**
> * Name of the registered MBean.
> */
> private ObjectName objectName;
>
> /** [EMAIL PROTECTED] MBeanServer} instance, set when registration done. */
> private MBeanServer server;
113,114d119
<
<
121,123c126,130
< ObjectName preRegister(MBeanServer server, ObjectName name) {
< getLogger().debug("preRegister called. Server="+server+ ",
name="+name);
< return name;
---
> ObjectName preRegister(MBeanServer server, ObjectName objectName) {
> getLogger().debug("preRegister called. Server="+server+ ",
name="+objectName);
> this.server = server;
> this.objectName = objectName;
> return objectName;
125a133,138
> /**
> * Returns the registered object name of this MBean.
> */
> protected ObjectName getObjectName() {
> return objectName;
> }
127c140,145
<
---
> /**
> * Returns the registered MBeanServer of this MBean.
> */
> protected MBeanServer getServer() {
> return server;
> }
Index: tests/src/java/org/apache/log4j/jmx/HierarchyMBeanTest.java
===================================================================
0a1,59
> package org.apache.log4j.jmx;
>
> import java.util.Iterator;
> import java.util.Properties;
> import java.util.Set;
> import java.util.TreeSet;
>
> import javax.management.MBeanParameterInfo;
> import javax.management.MBeanServer;
> import javax.management.MBeanServerFactory;
> import javax.management.ObjectName;
>
> import junit.framework.TestCase;
>
> import org.apache.log4j.Logger;
> import org.apache.log4j.PropertyConfigurator;
> import org.apache.log4j.varia.NullAppender;
>
> public class HierarchyMBeanTest extends TestCase {
>
> public void testConf() throws Exception {
> Properties p = new Properties();
> p.put("log4j.rootLogger","DEBUG,C");
> p.put("log4j.appender.C","org.apache.log4j.ConsoleAppender");
> p.put("log4j.appender.C","layout=org.apache.log4j.SimpleLayout");
> PropertyConfigurator.configure(p);
> HierarchyDynamicMBean h = new HierarchyDynamicMBean();
>
> Logger l = Logger.getLogger(getClass());
> l.info("hi");
>
> MBeanServer server = MBeanServerFactory.createMBeanServer();
> ObjectName ho = new ObjectName("foo:type=Hierarchy");
> server.registerMBean(h, ho);
> assertTrue(server.isRegistered(new ObjectName
("foo:logger=root")));
>
> NullAppender a = new NullAppender();
> a.setName("na");
> l.addAppender(a);
> // Use MBeanServer ...
> // h.addLoggerMBean(l);
> server.invoke(ho, "addLoggerMBean", new Object[] { l.getName
() }, null);
> assertTrue(server.isRegistered(new ObjectName("foo:logger=" +
l.getName())));
> assertTrue(server.isRegistered(new ObjectName
("foo:appender=na")));
>
> server.invoke(ho, "addLoggerMBeans", null, null);
>
> Set set = server.queryNames(null, null);
> Iterator i = set.iterator();
> while (i.hasNext())
> System.out.println(i.next());
> }
>
> public void testInfo() {
> // Some JMX implementations do not allow spaces in parameter
names
> MBeanParameterInfo info = new MBeanParameterInfo("spa ce",
TestCase.class.toString(), "desc");
> }
>
> }
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]