View Javadoc

1   /**
2    * Logback: the generic, reliable, fast and flexible logging framework.
3    * 
4    * Copyright (C) 2000-2008, QOS.ch
5    * 
6    * This library is free software, you can redistribute it and/or modify it under
7    * the terms of the GNU Lesser General Public License as published by the Free
8    * Software Foundation.
9    */
10  package ch.qos.logback.classic.jmx;
11  
12  import javax.management.InstanceNotFoundException;
13  import javax.management.MBeanRegistrationException;
14  import javax.management.MBeanServer;
15  import javax.management.MalformedObjectNameException;
16  import javax.management.ObjectName;
17  
18  import ch.qos.logback.classic.LoggerContext;
19  import ch.qos.logback.core.Context;
20  import ch.qos.logback.core.status.StatusUtil;
21  
22  public class MBeanUtil {
23  
24    static final String DOMAIN = "ch.qos.logback.classic";
25  
26    static public String getObjectNameFor(String contextName, Class type) {
27      String objectNameAsStr = DOMAIN + ":Name=" + contextName + ",Type="
28          + type.getName();
29      return objectNameAsStr;
30    }
31  
32    public static ObjectName string2ObjectName(Context context, Object caller,
33        String objectNameAsStr) {
34      String msg = "Failed to convert [" + objectNameAsStr + "] to ObjectName";
35  
36      try {
37        return new ObjectName(objectNameAsStr);
38      } catch (MalformedObjectNameException e) {
39        StatusUtil.addError(context, caller, msg, e);
40        return null;
41      } catch (NullPointerException e) {
42        StatusUtil.addError(context, caller, msg, e);
43        return null;
44      }
45    }
46  
47    public static boolean isRegistered(MBeanServer mbs, ObjectName objectName) {
48      return mbs.isRegistered(objectName);
49    }
50  
51    public static void createAndRegisterJMXConfigurator(
52        MBeanServer mbs, LoggerContext loggerContext,
53        JMXConfigurator jmxConfigurator, ObjectName objectName, Object caller) {
54      try {
55        mbs.registerMBean(jmxConfigurator, objectName);
56      } catch (Exception e) {
57        StatusUtil.addError(loggerContext, caller, "Failed to create mbean", e);
58      }
59    }
60  
61    public static void unregister(LoggerContext loggerContext, MBeanServer mbs,
62        ObjectName objectName, Object caller) {
63      if (mbs.isRegistered(objectName)) {
64        try {
65          StatusUtil.addInfo(loggerContext, caller, "Unregistering mbean ["
66              + objectName + "]");
67          mbs.unregisterMBean(objectName);
68        } catch (InstanceNotFoundException e) {
69          // this is theoretically impossible
70          StatusUtil.addError(loggerContext, caller, "Failed to unregister mbean"
71              + objectName, e);
72        } catch (MBeanRegistrationException e) {
73          // this is theoretically impossible
74          StatusUtil.addError(loggerContext, caller, "Failed to unregister mbean"
75              + objectName, e);
76        }
77      } else {
78        StatusUtil.addInfo(loggerContext, caller, "mbean [" + objectName
79            + "] does not seem to be registered");
80      }
81    }
82  
83  }