DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=30055>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=30055

Problem with registering Appenders with the same name in the LoggerDynamicMBean

           Summary: Problem with registering Appenders with the same name in
                    the LoggerDynamicMBean
           Product: Log4j
           Version: unspecified
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Other
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


I'm creating a management system that includes using MBeans to manage the 
logger module. 

the logger is configured in an xml file and includes some appenders and some 
loggers that use these appenders.  loggers may use the same appenders. the 
appenders' name is used to compose it's ObjectName when registering it as an 
AppenderDynamicMBean. therefore, if 2 loggers use the same appender, they will 
both try to register them in the MBeanServer. as soon as the first request is 
made, all others will fail -due to the duplication of the ObjectName assigned 
for the MBean. and the problem occurs in the following code in 
LoggerDynamicMBean.java:

  void registerAppenderMBean(Appender appender) {
    String name = appender.getName();
    cat.debug("Adding AppenderMBean for appender named "+name);
    ObjectName objectName = null;
    try {
      AppenderDynamicMBean appenderMBean = new AppenderDynamicMBean(appender);
      objectName = new ObjectName("log4j", "appender", name);
      server.registerMBean(appenderMBean, objectName);

      dAttributes.add(new MBeanAttributeInfo("appender="+name,
                                             "javax.management.ObjectName",
                                             "The "+name+" appender.",
                                             true,
                                             true,
                                             false));

    } catch(Exception e) {
      cat.error("Could not add appenderMBean for ["+name+"].", e);
    }
  }

The part when the second logger tries to register the appender, 
an "InstanceAlreadyExistsException" is thrown (which is ok) however the 
following line is not executed (which is not ok!). and the appender is never 
registered as the MBean's attribute!

I would suggest catch the "InstanceAlreadyExistsException" separately and when 
it is being caught - to still add the appender as the attribute of the 
LoggerDynamicMBean - that fact that it already exists on the MBeanServer does 
not mean it should not be registered as an attribute of the LoggerDynamicMBean.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to