1 8 9 package test.mx4j; 10 11 import java.util.ArrayList ; 12 import java.util.List ; 13 import javax.management.Attribute ; 14 import javax.management.AttributeList ; 15 import javax.management.AttributeNotFoundException ; 16 import javax.management.DynamicMBean ; 17 import javax.management.InvalidAttributeValueException ; 18 import javax.management.MBeanAttributeInfo ; 19 import javax.management.MBeanException ; 20 import javax.management.MBeanInfo ; 21 import javax.management.MBeanOperationInfo ; 22 import javax.management.MBeanParameterInfo ; 23 import javax.management.MBeanServer ; 24 import javax.management.MBeanServerFactory ; 25 import javax.management.ObjectName ; 26 import javax.management.ReflectionException ; 27 28 import mx4j.AbstractDynamicMBean; 29 import test.MX4JTestCase; 30 31 34 public class AbstractDynamicMBeanTest extends MX4JTestCase 35 { 36 public AbstractDynamicMBeanTest(String s) 37 { 38 super(s); 39 } 40 41 public void testRegistration() throws Exception 42 { 43 MBeanServer server = MBeanServerFactory.newMBeanServer(); 44 ObjectName name = new ObjectName ("domain", "mbean", "dynamic"); 45 Dynamic mbean = new Dynamic(); 46 server.registerMBean(mbean, name); 47 } 48 49 public void testGetAttibuteForIsAttribute() throws Exception 50 { 51 MBeanServer server = MBeanServerFactory.newMBeanServer(); 52 ObjectName name = new ObjectName ("domain", "mbean", "dynamic"); 53 Dynamic mbean = new Dynamic(); 54 server.registerMBean(mbean, name); 55 Object result = server.getAttribute(name, "Running"); 56 if (!((Boolean )result).booleanValue()) fail("getAttribute does not work"); 57 } 58 59 public void testGetAttibuteForGetAttribute() throws Exception 60 { 61 MBeanServer server = MBeanServerFactory.newMBeanServer(); 62 ObjectName name = new ObjectName ("domain", "mbean", "dynamic"); 63 Dynamic mbean = new Dynamic(); 64 server.registerMBean(mbean, name); 65 Object result = server.getAttribute(name, "Name"); 66 assertEquals(result, mbean.getName()); 67 } 68 69 public void testGetAttibuteForPrimitiveType() throws Exception 70 { 71 MBeanServer server = MBeanServerFactory.newMBeanServer(); 72 ObjectName name = new ObjectName ("domain", "mbean", "dynamic"); 73 DynamicDerived mbean = new DynamicDerived(); 74 server.registerMBean(mbean, name); 75 Integer result = (Integer )server.getAttribute(name, "Status"); 76 assertEquals(result.intValue(), mbean.getStatus()); 77 } 78 79 public void testSetAttibute() throws Exception 80 { 81 MBeanServer server = MBeanServerFactory.newMBeanServer(); 82 ObjectName name = new ObjectName ("domain", "mbean", "dynamic"); 83 Dynamic mbean = new Dynamic(); 84 server.registerMBean(mbean, name); 85 86 String value = "simon"; 87 server.setAttribute(name, new Attribute ("Name", value)); 88 89 assertEquals(value, mbean.getName()); 90 91 Object result = server.getAttribute(name, "Name"); 92 assertEquals(result, value); 93 } 94 95 public void testSetAttributeWithPrimitiveType() throws Exception 96 { 97 MBeanServer server = MBeanServerFactory.newMBeanServer(); 98 ObjectName name = new ObjectName ("domain", "mbean", "dynamic"); 99 DynamicDerived mbean = new DynamicDerived(); 100 server.registerMBean(mbean, name); 101 102 Integer value = new Integer (13); 103 server.setAttribute(name, new Attribute ("Status", value)); 104 105 Integer result = (Integer )server.getAttribute(name, "Status"); 106 assertEquals(result.intValue(), value.intValue()); 107 } 108 109 public void testSetAttributeWithNullValue() throws Exception 110 { 111 MBeanServer server = MBeanServerFactory.newMBeanServer(); 112 ObjectName name = new ObjectName ("domain", "mbean", "dynamic"); 113 Dynamic mbean = new Dynamic(); 114 server.registerMBean(mbean, name); 115 116 String value = null; 117 server.setAttribute(name, new Attribute ("Name", value)); 118 119 assertEquals(value, mbean.getName()); 120 121 Object result = server.getAttribute(name, "Name"); 122 assertEquals(result, value); 123 } 124 125 public void testOperation() throws Exception 126 { 127 MBeanServer server = MBeanServerFactory.newMBeanServer(); 128 ObjectName name = new ObjectName ("domain", "mbean", "dynamic"); 129 Dynamic mbean = new Dynamic(); 130 server.registerMBean(mbean, name); 131 132 String key = "key"; 133 Object value = new Object (); 134 List list = (List )server.invoke(name, "operation", new Object []{key, value}, new String []{String .class.getName(), Object .class.getName()}); 135 assertEquals(list.size(), 2); 136 assertEquals(list.get(0), key); 137 assertEquals(list.get(1), value); 138 } 139 140 public void testInvocationOfMethodsNotPresentInMBeanInfo() throws Exception 141 { 142 MBeanServer server = MBeanServerFactory.newMBeanServer(); 143 ObjectName name = new ObjectName ("domain", "mbean", "dynamic"); 144 Dynamic mbean = new Dynamic(); 145 server.registerMBean(mbean, name); 146 147 try 148 { 149 server.getAttribute(name, "MBeanInfo"); 150 fail("getMBeanInfo should not be invocable"); 151 } 152 catch (AttributeNotFoundException x) 153 { 154 } 155 } 156 157 public void testInvocationOfNonExistingSetter() throws Exception 158 { 159 MBeanServer server = MBeanServerFactory.newMBeanServer(); 160 ObjectName name = new ObjectName ("domain", "mbean", "dynamic"); 161 Dynamic mbean = new Dynamic(); 162 server.registerMBean(mbean, name); 163 164 try 165 { 166 server.setAttribute(name, new Attribute ("Running", Boolean.FALSE)); 167 fail("getMBeanInfo should not be invocable"); 168 } 169 catch (ReflectionException x) 170 { 171 } 172 } 173 174 public void testComposedDynamicMBean() throws Exception 175 { 176 MBeanServer server = MBeanServerFactory.newMBeanServer(); 177 ObjectName name = new ObjectName ("domain", "mbean", "dynamic"); 178 ComposedDynamicMBean mbean = new ComposedDynamicMBean(); 179 server.registerMBean(mbean, name); 180 181 int value = 17; 183 mbean.setStatus(value); 184 Integer result = (Integer )server.getAttribute(name, "Status"); 185 if (result.intValue() != value) fail("getAttribute does not work"); 186 187 value = 3; 189 server.setAttribute(name, new Attribute ("Status", new Integer (value))); 190 if (mbean.getStatus() != value) fail("setAttribute does not work"); 191 192 mbean.disable(); 194 server.invoke(name, "enable", null, null); 195 if (!mbean.isEnabled()) fail("invoke does not work"); 196 197 server.invoke(name, "disable", null, null); 198 if (mbean.isEnabled()) fail("invoke does not work"); 199 } 200 201 public static class Dynamic extends AbstractDynamicMBean 202 { 203 private String m_name = "dummy"; 204 205 protected MBeanAttributeInfo [] createMBeanAttributeInfo() 206 { 207 return new MBeanAttributeInfo [] 208 { 209 new MBeanAttributeInfo ("Name", String .class.getName(), "The name", true, true, false), 210 new MBeanAttributeInfo ("Running", boolean.class.getName(), "The running status", true, false, true) 211 }; 212 } 213 214 protected MBeanOperationInfo [] createMBeanOperationInfo() 215 { 216 return new MBeanOperationInfo [] 217 { 218 new MBeanOperationInfo ("operation", "An operation", new MBeanParameterInfo [] 219 { 220 new MBeanParameterInfo ("key", String .class.getName(), "The key"), 221 new MBeanParameterInfo ("value", Object .class.getName(), "The value") 222 }, List .class.getName(), MBeanOperationInfo.INFO) 223 }; 224 } 225 226 public String getName() 227 { 228 return m_name; 229 } 230 231 public void setName(String name) 232 { 233 m_name = name; 234 } 235 236 public boolean isRunning() 237 { 238 return true; 239 } 240 241 public List operation(String key, Object value) 242 { 243 ArrayList list = new ArrayList (); 244 list.add(key); 245 list.add(value); 246 return list; 247 } 248 } 249 250 public static class DynamicDerived extends Dynamic 251 { 252 private int m_status; 253 254 protected MBeanAttributeInfo [] createMBeanAttributeInfo() 255 { 256 MBeanAttributeInfo [] info = super.createMBeanAttributeInfo(); 257 MBeanAttributeInfo [] newInfo = new MBeanAttributeInfo [info.length + 1]; 258 System.arraycopy(info, 0, newInfo, 0, info.length); 259 newInfo[info.length] = new MBeanAttributeInfo ("Status", int.class.getName(), "The status", true, true, false); 260 return newInfo; 261 } 262 263 public MBeanInfo getMBeanInfo() 264 { 265 return createMBeanInfo(); 267 } 268 269 public int getStatus() 270 { 271 return m_status; 272 } 273 274 public void setStatus(int status) 275 { 276 m_status = status; 277 } 278 } 279 280 public static class ComposedDynamicMBean implements DynamicMBean 281 { 282 private AbstractDynamicMBean delegate = new AbstractDynamicMBean() 283 { 284 protected MBeanAttributeInfo [] createMBeanAttributeInfo() 285 { 286 return new MBeanAttributeInfo [] 287 { 288 new MBeanAttributeInfo ("Status", int.class.getName(), "The status", true, true, false), 289 new MBeanAttributeInfo ("Enabled", boolean.class.getName(), "The enable status", true, false, true) 290 }; 291 } 292 293 protected MBeanOperationInfo [] createMBeanOperationInfo() 294 { 295 return new MBeanOperationInfo [] 296 { 297 new MBeanOperationInfo ("enable", "Enables this MBean", new MBeanParameterInfo [0], Void .class.getName(), MBeanOperationInfo.ACTION), 298 new MBeanOperationInfo ("disable", "Disables this MBean", new MBeanParameterInfo [0], Void .class.getName(), MBeanOperationInfo.ACTION) 299 }; 300 } 301 }; 302 303 private int status; 304 private boolean enabled; 305 306 public ComposedDynamicMBean() 307 { 308 delegate.setResource(this); 309 } 310 311 public Object getAttribute(String attribute) throws AttributeNotFoundException , MBeanException , ReflectionException 312 { 313 return delegate.getAttribute(attribute); 314 } 315 316 public AttributeList getAttributes(String [] attributes) 317 { 318 return delegate.getAttributes(attributes); 319 } 320 321 public MBeanInfo getMBeanInfo() 322 { 323 return delegate.getMBeanInfo(); 324 } 325 326 public Object invoke(String method, Object [] arguments, String [] params) throws MBeanException , ReflectionException 327 { 328 return delegate.invoke(method, arguments, params); 329 } 330 331 public void setAttribute(Attribute attribute) throws AttributeNotFoundException , InvalidAttributeValueException , MBeanException , ReflectionException 332 { 333 delegate.setAttribute(attribute); 334 } 335 336 public AttributeList setAttributes(AttributeList attributes) 337 { 338 return delegate.setAttributes(attributes); 339 } 340 341 public void setStatus(int status) 342 { 343 this.status = status; 344 } 345 346 public int getStatus() 347 { 348 return status; 349 } 350 351 public boolean isEnabled() 352 { 353 return this.enabled; 354 } 355 356 public void enable() 357 { 358 this.enabled = true; 359 } 360 361 public void disable() 362 { 363 this.enabled = false; 364 } 365 } 366 } 367 | Popular Tags |