1 22 package org.jboss.system; 23 24 import java.util.List ; 25 import javax.management.Attribute ; 26 import javax.management.AttributeList ; 27 import javax.management.AttributeNotFoundException ; 28 import javax.management.DynamicMBean ; 29 import javax.management.InvalidAttributeValueException ; 30 import javax.management.MBeanAttributeInfo ; 31 import javax.management.MBeanConstructorInfo ; 32 import javax.management.MBeanException ; 33 import javax.management.MBeanInfo ; 34 import javax.management.MBeanNotificationInfo ; 35 import javax.management.MBeanOperationInfo ; 36 import javax.management.MBeanParameterInfo ; 37 import javax.management.ReflectionException ; 38 39 import org.jboss.logging.Logger; 40 41 56 public class ServiceDynamicMBeanSupport 57 extends ServiceMBeanSupport 58 implements DynamicMBean 59 { 60 61 63 65 67 69 public ServiceDynamicMBeanSupport() 70 { 71 super(); 72 } 73 74 public ServiceDynamicMBeanSupport(Class type) 75 { 76 super(type); 77 } 78 79 public ServiceDynamicMBeanSupport(String category) 80 { 81 super(category); 82 } 83 84 public ServiceDynamicMBeanSupport(Logger log) 85 { 86 super(log); 87 } 88 89 91 93 public Object getAttribute(String attribute) 94 throws AttributeNotFoundException , MBeanException , ReflectionException 95 { 96 if("State".equals(attribute)) 99 { 100 return new Integer (getState()); 101 } 102 if("StateString".equals(attribute)) 103 { 104 return getStateString(); 105 } 106 if("Name".equals(attribute)) 107 { 108 return getName(); 109 } 110 111 return getInternalAttribute (attribute); 114 115 } 116 117 public Object invoke(String actionName, Object [] params, String [] signature) 118 throws MBeanException , ReflectionException 119 { 120 try 121 { 122 if (ServiceController.JBOSS_INTERNAL_LIFECYCLE.equals(actionName)) 123 { 124 jbossInternalLifecycle((String ) params[0]); 125 return null; 126 } 127 if (params == null || params.length == 0) 128 { 129 if ("create".equals(actionName)) 130 { 131 create(); return null; 132 } 133 else if ("start".equals(actionName)) 134 { 135 start(); return null; 136 } 137 else if ("stop".equals(actionName)) 138 { 139 stop(); return null; 140 } 141 else if ("destroy".equals(actionName)) 142 { 143 destroy(); return null; 144 } 145 } 146 } 147 catch (Exception e) 148 { 149 throw new MBeanException (e, "Exception in service lifecyle operation: " + actionName); 150 } 151 152 try 155 { 156 return internalInvoke (actionName, params, signature); 157 } 158 catch (Exception e) 159 { 160 throw new MBeanException (e, 161 "Exception invoking: " + actionName); 162 } 163 } 164 165 public void setAttribute(Attribute attribute) 166 throws 167 AttributeNotFoundException , 168 InvalidAttributeValueException , 169 MBeanException , 170 ReflectionException 171 { 172 setInternalAttribute (attribute); 173 } 174 175 public AttributeList setAttributes(AttributeList attributes) 176 { 177 AttributeList list = new AttributeList (); 178 if (attributes == null) 179 return list; 180 for (int i = 0; i < attributes.size(); ++i) 181 { 182 Attribute attribute = (Attribute ) attributes.get(i); 183 try 184 { 185 setAttribute(attribute); 186 list.add(attribute); 187 } 188 catch (Throwable t) 189 { 190 log.debug("Error setting attribute " + attribute.getName(), t); 191 } 192 } 193 return list; 194 } 195 196 public AttributeList getAttributes(String [] attributes) 197 { 198 AttributeList list = new AttributeList (); 199 if (attributes == null) 200 return list; 201 for (int i = 0; i < attributes.length; ++i) 202 { 203 try 204 { 205 Object value = getAttribute(attributes[i]); 206 list.add(new Attribute (attributes[i], value)); 207 } 208 catch (Throwable t) 209 { 210 log.debug("Error getting attribute " + attributes[i], t); 211 } 212 } 213 return list; 214 } 215 216 public MBeanInfo getMBeanInfo() 217 { 218 MBeanParameterInfo [] noParams = new MBeanParameterInfo [] {}; 219 220 MBeanConstructorInfo [] ctorInfo = getInternalConstructorInfo(); 221 222 MBeanAttributeInfo [] attrs = getInternalAttributeInfo(); 223 MBeanAttributeInfo [] attrInfo = new MBeanAttributeInfo [3 + attrs.length]; 224 attrInfo[0] = new MBeanAttributeInfo ("Name", 225 "java.lang.String", 226 "Return the service name", 227 true, 228 false, 229 false); 230 attrInfo[1] = new MBeanAttributeInfo ("State", 231 "int", 232 "Return the service state", 233 true, 234 false, 235 false); 236 attrInfo[2] = new MBeanAttributeInfo ("StateString", 237 "java.lang.String", 238 "Return the service's state as a String", 239 true, 240 false, 241 false); 242 System.arraycopy(attrs, 0, attrInfo, 3, attrs.length); 243 244 MBeanParameterInfo [] jbossInternalLifecycleParms = new MBeanParameterInfo [1]; 245 jbossInternalLifecycleParms[0] = new MBeanParameterInfo ("method", String .class.getName(), "The lifecycle method"); 246 247 MBeanOperationInfo [] ops = getInternalOperationInfo(); 248 MBeanOperationInfo [] opInfo = new MBeanOperationInfo [5 + ops.length]; 249 opInfo[0] = new MBeanOperationInfo ("create", 250 "create service lifecycle operation", 251 noParams, 252 "void", 253 MBeanOperationInfo.ACTION); 254 255 opInfo[1] = new MBeanOperationInfo ("start", 256 "start service lifecycle operation", 257 noParams, 258 "void", 259 MBeanOperationInfo.ACTION); 260 261 opInfo[2] = new MBeanOperationInfo ("stop", 262 "stop service lifecycle operation", 263 noParams, 264 "void", 265 MBeanOperationInfo.ACTION); 266 267 opInfo[3] = new MBeanOperationInfo ("destroy", 268 "destroy service lifecycle operation", 269 noParams, 270 "void", 271 MBeanOperationInfo.ACTION); 272 273 opInfo[4] = new MBeanOperationInfo (ServiceController.JBOSS_INTERNAL_LIFECYCLE, 274 "Internal lifecycle (for internal use)", 275 jbossInternalLifecycleParms, 276 "void", 277 MBeanOperationInfo.ACTION); 278 279 System.arraycopy(ops, 0, opInfo, 5, ops.length); 280 281 MBeanNotificationInfo [] notifyInfo = getInternalNotificationInfo(); 282 return new MBeanInfo (getClass().getName(), 283 getInternalDescription(), 284 attrInfo, 285 ctorInfo, 286 opInfo, 287 notifyInfo); 288 } 289 290 292 294 296 protected String getInternalDescription() 297 { 298 return "DynamicMBean Service"; 299 } 300 301 protected MBeanConstructorInfo [] getInternalConstructorInfo() 302 { 303 return new MBeanConstructorInfo [0]; 304 } 305 306 protected MBeanAttributeInfo [] getInternalAttributeInfo() 307 { 308 return new MBeanAttributeInfo [0]; 309 } 310 311 protected MBeanOperationInfo [] getInternalOperationInfo() 312 { 313 return new MBeanOperationInfo [0]; 314 } 315 316 protected MBeanNotificationInfo [] getInternalNotificationInfo() 317 { 318 return new MBeanNotificationInfo [0]; 319 } 320 321 protected Object getInternalAttribute(String attribute) 322 throws AttributeNotFoundException , MBeanException , ReflectionException 323 { 324 throw new AttributeNotFoundException ("Attribute not found " + attribute); 325 } 326 327 protected void setInternalAttribute(Attribute attribute) 328 throws AttributeNotFoundException , InvalidAttributeValueException , MBeanException , ReflectionException 329 { 330 throw new AttributeNotFoundException ("Attribute not found " + attribute); 331 } 332 333 protected Object internalInvoke(String actionName, Object [] params, String [] signature) 334 throws MBeanException , ReflectionException 335 { 336 StringBuffer buffer = new StringBuffer (); 337 buffer.append(actionName); 338 buffer.append('('); 339 for (int i = 0; i < signature.length; ++i) 340 { 341 buffer.append(signature[i]); 342 if (i < signature.length - 1) 343 buffer.append(", "); 344 } 345 buffer.append(')'); 346 throw new MBeanException (new Exception ("Operation not found " + buffer.toString()), "Operation not found " + actionName); 347 } 348 349 350 352 354 } 355 | Popular Tags |