1 package org.sapia.soto.jmx.mx4j; 2 3 import mx4j.util.StandardMBeanProxy; 4 5 import org.sapia.soto.jmx.JmxService; 6 import org.sapia.soto.jmx.JmxServiceFactory; 7 8 import javax.management.DynamicMBean ; 9 import javax.management.InstanceAlreadyExistsException ; 10 import javax.management.InstanceNotFoundException ; 11 import javax.management.MBeanRegistrationException ; 12 import javax.management.MBeanServer ; 13 import javax.management.MBeanServerFactory ; 14 import javax.management.NotCompliantMBeanException ; 15 import javax.management.ObjectName ; 16 import javax.management.RuntimeMBeanException ; 17 18 import javax.naming.Context ; 19 20 21 30 public class Mx4jService implements JmxService { 31 public static final int DEFAULT_PORT = 1099; 32 private int _registryPort = DEFAULT_PORT; 33 private String _registryHost; 34 private String _jndiName = "Mx4jService"; 35 private MBeanServer _server; 36 private ObjectName _naming; 37 private JRMPAdaptorExMBean _mbean; 38 39 public void setHost(String host) { 40 _registryHost = host; 41 } 42 43 public void setPort(int port) { 44 _registryPort = port; 45 } 46 47 public void setJndiName(String name) { 48 _jndiName = name; 49 } 50 51 54 public void registerMBean(DynamicMBean mbean, ObjectName name) 55 throws MBeanRegistrationException , InstanceAlreadyExistsException , 56 NotCompliantMBeanException { 57 _server.registerMBean(mbean, name); 58 } 59 60 63 public void unregisterMBean(ObjectName name) 64 throws InstanceNotFoundException , MBeanRegistrationException { 65 _server.unregisterMBean(name); 66 } 67 68 71 public void init() throws Exception { 72 _server = MBeanServerFactory.createMBeanServer(); 74 75 _naming = new ObjectName ("Naming:type=rmiregistry"); 77 78 _server.createMBean("mx4j.tools.naming.NamingService", _naming, null); 79 _server.invoke(_naming, "start", null, null); 80 81 ObjectName adaptor = new ObjectName ("Adaptor:protocol=JRMP"); 83 84 _server.createMBean(JRMPAdaptorEx.class.getName(), adaptor, null); 86 87 _mbean = (JRMPAdaptorExMBean) StandardMBeanProxy.create(JRMPAdaptorExMBean.class, 88 _server, adaptor); 89 _mbean.setMBeanServer(_server); 90 91 _mbean.setJNDIName(_jndiName); 92 93 _mbean.putJNDIProperty(Context.INITIAL_CONTEXT_FACTORY, 96 "com.sun.jndi.rmi.registry.RegistryContextFactory"); 97 98 if (_registryHost == null) { 99 _registryHost = "localhost"; 100 } 101 102 _mbean.putJNDIProperty(Context.PROVIDER_URL, 103 "rmi://" + _registryHost + ":" + _registryPort); 104 JmxServiceFactory.setDefaultInstance(this); 105 } 106 107 111 public void start() throws Exception { 112 try { 114 _mbean.start(); 115 } catch (RuntimeMBeanException e) { 116 throw e.getTargetException(); 117 } 118 } 119 120 123 public void dispose() { 124 try { 125 _mbean.stop(); 126 127 _server.invoke(_naming, "stop", null, null); 129 130 JmxServiceFactory.setDefaultInstance(null); 131 } catch (Exception e) { 132 } 134 } 135 } 136 | Popular Tags |