1 23 24 package org.continuent.sequoia.controller.jmx; 25 26 import javax.management.MBeanServer ; 27 import javax.management.MBeanServerFactory ; 28 import javax.management.ObjectInstance ; 29 import javax.management.ObjectName ; 30 31 import org.continuent.sequoia.common.i18n.Translate; 32 import org.continuent.sequoia.common.jmx.JmxException; 33 import org.continuent.sequoia.common.log.Trace; 34 35 45 public class MBeanServerManager 46 { 47 private static MBeanServer mbs; 48 49 static Trace logger = Trace 50 .getLogger("org.continuent.sequoia.controller.jmx.MBeanServer"); 51 52 58 public static synchronized MBeanServer getInstance() 59 { 60 if (mbs != null) 61 { 62 return mbs; 63 } 64 65 String defaultServerBuilder = System 66 .getProperty("javax.management.builder.initial"); 67 68 if (!MBeanServerBuilder.class.getName().equals(defaultServerBuilder)) 69 { 70 if (defaultServerBuilder != null) 71 logger.error("property javax.management.builder.initial was " 72 + defaultServerBuilder); 73 74 logger.debug("setting property javax.management.builder.initial"); 75 System.setProperty("javax.management.builder.initial", 76 org.continuent.sequoia.controller.jmx.MBeanServerBuilder.class 77 .getName()); 78 79 } 80 81 createJava5PlatformMBeanServer(); 83 if (null == mbs) 85 { 86 mbs = MBeanServerFactory.createMBeanServer(); 87 logger.debug(Translate.get("jmx.server.from.classpath")); } 89 90 return mbs; 91 } 92 93 97 private static void createJava5PlatformMBeanServer() 98 { 99 Class clazz; 100 try 101 { 102 clazz = Class.forName("java.lang.management.ManagementFactory"); } 104 catch (ClassNotFoundException e) 105 { 106 return; 108 } 109 try 110 { 111 mbs = (MBeanServer ) clazz 112 .getMethod("getPlatformMBeanServer", null).invoke(null, null); logger.debug(Translate.get("jmx.server.from.java5")); } 115 catch (Exception e) 116 { 117 logger.debug(Translate.get("jmx.server.not.java5"), e); } 119 } 120 121 124 public static void stopMBeanServer() 125 { 126 if (mbs != null) 127 { 128 MBeanServerFactory.releaseMBeanServer(mbs); 130 mbs = null; 131 } 132 } 133 134 156 public static ObjectInstance registerMBean(Object object, ObjectName name) 157 throws JmxException 158 { 159 MBeanServer server = getInstance(); 160 try 161 { 162 163 if (server != null) 164 { 165 logger.debug(Translate.get("jmx.register.mbean", new String []{ 166 object.getClass().toString(), name.getCanonicalName()})); 167 168 ObjectInstance objInstance = null; 169 if (!server.isRegistered(name)) 170 { 171 objInstance = server.registerMBean(object, name); 172 } 173 else 174 { 175 logger.error(Translate.get("jmx.register.mbean.already.exist", 176 new String []{name.getCanonicalName()})); 177 try 178 { 179 server.unregisterMBean(name); 180 } 181 catch (Exception e) 182 { 183 logger.error(Translate.get("jmx.delete.mbean.failed", new String []{ 184 name.toString(), e.getMessage()})); 185 } 186 objInstance = server.registerMBean(object, name); 187 } 188 189 logger.debug(Translate.get("jmx.server.mbean.count", "" 190 + server.getMBeanCount())); 191 return objInstance; 192 } 193 return null; 194 } 195 catch (Exception e) 196 { 197 logger.error(Translate.get("jmx.register.mbean.failed", 198 new String []{object.getClass().toString(), e.getMessage(), 199 e.getClass().toString()})); 200 e.printStackTrace(); 201 e.getCause().printStackTrace(); 202 throw new JmxException(e); 203 } 204 } 205 206 212 public static void unregister(ObjectName name) throws JmxException 213 { 214 MBeanServer server = getInstance(); 215 if (server != null) 216 { 217 try 218 { 219 server.unregisterMBean(name); 221 logger.debug(Translate.get("jmx.server.mbean.count", "" 222 + server.getMBeanCount())); 223 224 } 225 catch (Exception e) 226 { 227 logger.error(Translate.get("jmx.register.mbean.failed", new String []{ 228 name.getCanonicalName(), e.getMessage()})); 229 throw new JmxException(e); 230 } 231 } 232 } 233 234 } | Popular Tags |