1
2
3
4
5
6
7
8
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
70 StatusUtil.addError(loggerContext, caller, "Failed to unregister mbean"
71 + objectName, e);
72 } catch (MBeanRegistrationException e) {
73
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 }