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]

Reply via email to