1 package org.oddjob.jmx; 2 3 import java.io.IOException ; 4 import java.net.MalformedURLException ; 5 6 import javax.management.JMException ; 7 import javax.management.MBeanServer ; 8 import javax.management.MBeanServerFactory ; 9 import javax.management.ObjectName ; 10 import javax.management.remote.JMXConnectorServer ; 11 import javax.management.remote.JMXConnectorServerFactory ; 12 import javax.management.remote.JMXServiceURL ; 13 14 import org.oddjob.OddjobException; 15 import org.oddjob.arooa.ArooaConstants; 16 import org.oddjob.arooa.ArooaContext; 17 import org.oddjob.arooa.registry.ComponentRegistry; 18 import org.oddjob.jmx.server.IconicInfo; 19 import org.oddjob.jmx.server.InterfaceManagerFactory; 20 import org.oddjob.jmx.server.OddjobMBeanFactory; 21 import org.oddjob.jmx.server.OddjobSchedulerInfo; 22 import org.oddjob.jmx.server.ResetableInfo; 23 import org.oddjob.jmx.server.RunnableInfo; 24 import org.oddjob.jmx.server.ServerContext; 25 import org.oddjob.jmx.server.ServerModel; 26 import org.oddjob.jmx.server.StatefulInfo; 27 import org.oddjob.jmx.server.StoppableInfo; 28 import org.oddjob.jmx.server.StructuralInfo; 29 import org.oddjob.util.ThreadManager; 30 31 49 public class JMXServerJob { 50 52 57 private String name; 58 59 64 private Object root; 65 66 71 private String url; 72 73 80 private String logFormat; 81 82 86 private ThreadManager threadManager = new ThreadManager(); 87 88 89 private String address; 90 91 94 private ArooaContext context; 95 96 97 private OddjobMBeanFactory factory; 98 99 private ObjectName rootName; 100 101 private ServerModel model; 102 103 private JMXConnectorServer cntorServer; 104 105 110 public String getName() { 111 return name; 112 } 113 114 119 public void setName(String name) { 120 this.name = name; 121 } 122 123 128 public void setRoot(Object rootNode) { 129 this.root = rootNode; 130 } 131 132 137 public Object getRoot() { 138 return this.root; 139 } 140 141 public String getAddress() { 142 return address; 143 } 144 145 150 public void setUrl(String bindAs) { 151 this.url = bindAs; 152 } 153 154 159 public String getUrl() { 160 return url; 161 } 162 163 public boolean setContext(ArooaContext context) { 164 this.context = context; 165 return true; 166 } 167 168 public void start() 169 throws JMException , MalformedURLException , IOException { 170 if (root == null) { 171 throw new OddjobException("No root node."); 172 } 173 if (url == null) { 174 throw new OddjobException("Url missing."); 175 } 176 177 JMXServiceURL address = new JMXServiceURL (url); 178 179 MBeanServer server = MBeanServerFactory.createMBeanServer(); 180 181 InterfaceManagerFactory imf = new InterfaceManagerFactory(); 186 imf.addInterfaceInfo(new StatefulInfo()); 187 imf.addInterfaceInfo(new StructuralInfo()); 188 imf.addInterfaceInfo(new IconicInfo()); 189 imf.addInterfaceInfo(new RunnableInfo()); 190 imf.addInterfaceInfo(new StoppableInfo()); 191 imf.addInterfaceInfo(new ResetableInfo()); 192 imf.addInterfaceInfo(new OddjobSchedulerInfo()); 193 194 ComponentRegistry componentRegistry; 195 if (context == null) { 196 componentRegistry = null; 198 } 199 else { 200 componentRegistry = (ComponentRegistry) context.get(ArooaConstants.COMPONENT_REGISTRY); 201 } 202 203 model = new ServerModel( 204 address.getURLPath(), 205 threadManager, 206 imf); 207 model.setComponentRegistry(componentRegistry); 208 model.setLogFormat(logFormat); 209 model.setRoot(root); 210 211 factory = new OddjobMBeanFactory(server); 212 rootName = factory.createMBeanFor(root, 213 new ServerContext(model)); 214 215 216 cntorServer = JMXConnectorServerFactory.newJMXConnectorServer(address, null, server); 217 cntorServer.start(); 218 this.address = cntorServer.getAddress().toString(); 219 } 220 221 225 public void stop() throws Exception { 226 threadManager.stopAll(); 227 factory.destroy(rootName); 228 model.destroy(); 229 this.address = null; 230 cntorServer.stop(); 231 } 232 233 237 public String toString() { 238 if (name == null) { 239 return "Oddjob Server"; 240 } 241 return name; 242 } 243 } 244 | Popular Tags |