1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.util;
35
36 import info.magnolia.cms.core.Path;
37
38 import java.util.ArrayList;
39
40 import javax.management.InstanceAlreadyExistsException;
41 import javax.management.MBeanServer;
42 import javax.management.MBeanServerFactory;
43 import javax.management.ObjectName;
44
45 import org.slf4j.Logger;
46 import org.slf4j.LoggerFactory;
47
48
49
50
51
52
53
54 public class MBeanUtil {
55
56
57
58
59 private static Logger log = LoggerFactory.getLogger(MBeanUtil.class);
60
61 public static void registerMBean(String name, Object mbean) {
62 String appName = Path.getAppRootDir().getName();
63 final String id = "Magnolia:type=" + name + ",domain=" + appName;
64 try {
65 final ObjectName mbeanName = new ObjectName(id);
66 final MBeanServer mbeanServer = getMBeanServer();
67 if (!mbeanServer.isRegistered(mbeanName)) {
68 mbeanServer.registerMBean(mbean, mbeanName);
69 }
70 }
71 catch (InstanceAlreadyExistsException e) {
72 log.info("MBean '{}' already exists", id);
73 }
74 catch (Throwable t) {
75 log.error("Could not register JMX MBean '" + id + "'", t);
76 }
77 }
78
79 public static MBeanServer getMBeanServer() {
80 final ArrayList list = MBeanServerFactory.findMBeanServer(null);
81 final MBeanServer mbeanServer;
82 if (list != null && list.size() > 0) {
83 mbeanServer = (MBeanServer) list.get(0);
84 } else {
85 mbeanServer = MBeanServerFactory.createMBeanServer();
86 }
87 return mbeanServer;
88 }
89 }