1 16 package org.jmanage.testapp.jsr160; 17 18 import org.jmanage.core.util.Loggers; 19 import org.jmanage.testapp.mbeans.*; 20 21 import javax.management.MBeanServer ; 22 import javax.management.ObjectName ; 23 import javax.management.MBeanServerFactory ; 24 import javax.management.openmbean.OpenDataException ; 25 import javax.management.remote.JMXServiceURL ; 26 import javax.management.remote.JMXConnectorServer ; 27 import javax.management.remote.JMXConnectorServerFactory ; 28 import javax.management.remote.JMXAuthenticator ; 29 import javax.security.auth.Subject ; 30 import java.util.logging.Logger ; 31 import java.util.logging.Level ; 32 import java.util.HashMap ; 33 import java.util.Map ; 34 import java.io.IOException ; 35 import java.rmi.registry.LocateRegistry ; 36 37 42 public class JMXHelper { 43 44 private static final Logger logger = Loggers.getLogger(JMXHelper.class); 45 46 private static MBeanServer mbeanServer; 48 49 private static Object mbeanServerLock = new Object (); 51 52 57 private static MBeanServer getMBeanServer() { 58 59 if (mbeanServer == null) { 60 mbeanServer = _getMBeanServer(); 61 } 62 return mbeanServer; 63 } 64 65 69 public static void registerMBeans(int port, boolean jmxmpConnector) { 70 71 72 registerMBean(new Configuration(), ObjectNames.CONFIGURATION); 73 74 registerMBean(new Calculator(), ObjectNames.CALCULATOR); 75 76 registerMBean(new PrimitiveDataTypeTest(), 77 ObjectNames.PRIMITIVE_DATA_TYPE_TEST); 78 79 registerMBean(new DataTypeTest(), ObjectNames.DATA_TYPE_TEST); 80 81 registerMBean(new BigDataTypeTest(), ObjectNames.BIG_DATA_TYPE_TEST); 82 83 registerMBean(new ObjectNameDataTypeTest(), 84 ObjectNames.OBJECT_NAME_DATA_TYPE_TEST); 85 86 registerMBean(new TimeNotificationBroadcaster(), 87 ObjectNames.TIME_NOTIFICATION_BROADCASTER); 88 89 registerMBean(new DataFormat(), 90 ObjectNames.DATA_FORMAT); 91 92 try { 93 registerMBean(new OpenMBeanDataTypeTest(), 94 ObjectNames.OPEN_MBEAN_DATA_TYPE_TEST); 95 } catch (OpenDataException e) { 96 throw new RuntimeException (e); 97 } 98 99 if(!jmxmpConnector){ 100 101 startJMXConnectorServer(port); 102 }else{ 103 104 startJMXMPConnectorServer(port); 105 } 106 } 107 108 109 public static void registerMBean(Object instance, String objName) { 110 try { 111 ObjectName objectName = new ObjectName (objName); 112 MBeanServer server = getMBeanServer(); 113 server.registerMBean(instance, objectName); 114 logger.info("registered MBean: " + objName); 115 } catch (Exception e) { 116 logger.log(Level.SEVERE, "Failed to register MBean: " + objName, e); 117 } 118 } 119 120 121 private static void startJMXConnectorServer(int port){ 122 try { 123 124 startRMIRegistry(port); 125 126 JMXServiceURL url = new JMXServiceURL ( 127 "service:jmx:rmi:///jndi/rmi://localhost:" + port + "/testApp"); 128 Map env = new HashMap (); 129 JMXAuthenticator authenticator = new MyJMXAuthenticator(); 130 env.put(JMXConnectorServer.AUTHENTICATOR, authenticator); 131 JMXConnectorServer cs = 132 JMXConnectorServerFactory.newJMXConnectorServer(url, 133 env, getMBeanServer()); 134 cs.start(); 135 logger.info("JMXConnectorServer started. URL: " + url.toString()); 136 } catch (IOException e) { 137 logger.log(Level.SEVERE, "Failure while starting RMI connector", e); 138 } 139 } 140 141 private static class MyJMXAuthenticator implements JMXAuthenticator { 142 public Subject authenticate(Object credentials) { 143 System.out.println(credentials); 144 return null; 145 } 146 } 147 148 149 private static void startJMXMPConnectorServer(int port){ 150 try { 151 152 JMXServiceURL url = new JMXServiceURL ( 153 "service:jmx:jmxmp://localhost:" + port); 154 Map env = new HashMap (); 155 JMXAuthenticator authenticator = new MyJMXAuthenticator(); 156 env.put(JMXConnectorServer.AUTHENTICATOR, authenticator); 157 JMXConnectorServer cs = 158 JMXConnectorServerFactory.newJMXConnectorServer(url, 159 env, getMBeanServer()); 160 cs.start(); 161 logger.info("JMXConnectorServer started. URL: " + url.toString()); 162 } catch (IOException e) { 163 logger.log(Level.SEVERE, "Failure while starting RMI connector", e); 164 } 165 } 166 167 168 private static void startRMIRegistry(int port){ 169 try { 170 LocateRegistry.createRegistry(port); 171 logger.info("rmiregistry started on: " + port); 172 } catch (IOException e) { 173 logger.log(Level.WARNING, "Error starting rmiregistry on " + port, e); 174 } 175 } 176 177 178 181 185 private static MBeanServer _getMBeanServer() { 186 187 synchronized (mbeanServerLock) { 189 if (mbeanServer != null) 191 return mbeanServer; 192 return MBeanServerFactory.createMBeanServer(); 193 } 194 } 195 } 196 | Popular Tags |