1 package com.atlassian.plugin.jmx;
2
3 import java.lang.management.ManagementFactory;
4 import java.util.Hashtable;
5 import java.util.concurrent.atomic.AtomicInteger;
6
7 import javax.management.InstanceAlreadyExistsException;
8 import javax.management.InstanceNotFoundException;
9 import javax.management.MBeanRegistrationException;
10 import javax.management.MalformedObjectNameException;
11 import javax.management.NotCompliantMBeanException;
12 import javax.management.ObjectInstance;
13 import javax.management.ObjectName;
14
15 import com.google.common.collect.ImmutableMap;
16
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
19
20 public class JmxUtil
21 {
22 private static final Logger log = LoggerFactory.getLogger(JmxUtil.class);
23
24 private static final String DOMAIN = "com.atlassian.plugin";
25
26
27
28
29
30
31
32
33 public static ObjectName objectName(final AtomicInteger counter, final String type)
34 {
35 try
36 {
37 final String instance = Integer.toString(counter.getAndIncrement());
38 return new ObjectName(DOMAIN, new Hashtable<String, String>(ImmutableMap.of("instance", instance, "type", type)));
39 }
40 catch(final MalformedObjectNameException emon)
41 {
42 log.warn("Failed to create ObjectName: ", emon.getMessage());
43 }
44 return null;
45 }
46
47
48
49
50
51
52
53
54
55
56 public static ObjectInstance register(final Object object, final ObjectName objectName)
57 {
58 try
59 {
60 if (null != objectName)
61 {
62 return ManagementFactory.getPlatformMBeanServer().registerMBean(object, objectName);
63 }
64 else
65 {
66 log.warn("Failed to register, objectName null");
67 }
68 }
69 catch (final InstanceAlreadyExistsException eiae)
70 {
71 log.warn("Failed to register, instance already exists: ", eiae.getMessage());
72 }
73 catch (final MBeanRegistrationException emr)
74 {
75 log.warn("Failed to register, registration exception: ", emr.getMessage());
76 }
77 catch (final NotCompliantMBeanException encm)
78 {
79 log.warn("Failed to register, not compliant: ", encm.getMessage());
80 }
81 return null;
82 }
83
84
85
86
87
88
89
90
91
92 public static boolean unregister(final ObjectName objectName)
93 {
94 try
95 {
96 ManagementFactory.getPlatformMBeanServer().unregisterMBean(objectName);
97 return true;
98 }
99 catch (final InstanceNotFoundException einf)
100 {
101 log.warn("Failed to unregister, instance not found: ", einf.getMessage());
102 }
103 catch (final MBeanRegistrationException emr)
104 {
105 log.warn("Failed to unregister, registration exception: ", emr.getMessage());
106 }
107 return false;
108 }
109 }