1 46 package groovy.util; 47 48 import groovy.lang.GroovyObjectSupport; 49 import groovy.lang.GroovyRuntimeException; 50 51 import java.util.HashMap ; 52 import java.util.Map ; 53 import java.io.IOException ; 54 55 import javax.management.Attribute ; 56 import javax.management.JMException ; 57 import javax.management.MBeanException ; 58 import javax.management.MBeanInfo ; 59 import javax.management.MBeanOperationInfo ; 60 import javax.management.MBeanParameterInfo ; 61 import javax.management.MBeanServer ; 62 import javax.management.ObjectName ; 63 import javax.management.MBeanServerConnection ; 64 65 66 76 public class GroovyMBean extends GroovyObjectSupport { 77 78 private MBeanServerConnection server; 79 private ObjectName name; 80 private MBeanInfo beanInfo; 81 private Map operations = new HashMap (); 82 83 public GroovyMBean(MBeanServerConnection server, ObjectName name) throws JMException , IOException { 84 this.server = server; 85 this.name = name; 86 this.beanInfo = server.getMBeanInfo(name); 87 88 MBeanOperationInfo [] operationInfos = beanInfo.getOperations(); 89 for (int i = 0; i < operationInfos.length; i++ ) { 90 MBeanOperationInfo info = operationInfos[i]; 91 operations.put(info.getName(), createSignature(info)); 92 } 93 } 94 95 public MBeanServerConnection server() { 96 return server; 97 } 98 99 public ObjectName name() { 100 return name; 101 } 102 103 public MBeanInfo info() { 104 return beanInfo; 105 } 106 107 public Object getProperty(String property) { 108 try { 109 return server.getAttribute(name, property); 110 } 111 catch (MBeanException e) { 112 throw new GroovyRuntimeException("Could not access property: " + property + ". Reason: " + e, e.getTargetException()); 113 } 114 catch (Exception e) { 115 throw new GroovyRuntimeException("Could not access property: " + property + ". Reason: " + e, e); 116 } 117 } 118 119 public void setProperty(String property, Object value) { 120 try { 121 server.setAttribute(name, new Attribute (property, value)); 122 } 123 catch (MBeanException e) { 124 throw new GroovyRuntimeException("Could not set property: " + property + ". Reason: " + e, e.getTargetException()); 125 } 126 catch (Exception e) { 127 throw new GroovyRuntimeException("Could not set property: " + property + ". Reason: " + e, e); 128 } 129 } 130 131 public Object invokeMethod(String method, Object arguments) { 132 String [] signature = (String []) operations.get(method); 133 if (signature != null) { 134 Object [] argArray = null; 135 if (arguments instanceof Object []) { 136 argArray = (Object []) arguments; 137 } 138 else { 139 argArray = new Object [] { arguments }; 140 } 141 try { 142 return server.invoke(name, method, argArray, signature); 143 } 144 catch (MBeanException e) { 145 throw new GroovyRuntimeException("Could not invoke method: " + method + ". Reason: " + e, e.getTargetException()); 146 } 147 catch (Exception e) { 148 throw new GroovyRuntimeException("Could not invoke method: " + method + ". Reason: " + e, e); 149 } 150 } 151 else { 152 return super.invokeMethod(method, arguments); 153 } 154 } 155 156 protected String [] createSignature(MBeanOperationInfo info) { 157 MBeanParameterInfo [] params = info.getSignature(); 158 String [] answer = new String [params.length]; 159 for (int i = 0; i < params.length; i++) { 160 answer[i] = params[i].getType(); 161 } 162 return answer; 163 } 164 } 165 | Popular Tags |