KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > mx4j > AbstractDynamicMBeanTest


1 /*
2  * Copyright (C) The MX4J Contributors.
3  * All rights reserved.
4  *
5  * This software is distributed under the terms of the MX4J License version 1.0.
6  * See the terms of the MX4J License in the documentation provided with this software.
7  */

8
9 package test.mx4j;
10
11 import java.util.ArrayList JavaDoc;
12 import java.util.List JavaDoc;
13 import javax.management.Attribute JavaDoc;
14 import javax.management.AttributeList JavaDoc;
15 import javax.management.AttributeNotFoundException JavaDoc;
16 import javax.management.DynamicMBean JavaDoc;
17 import javax.management.InvalidAttributeValueException JavaDoc;
18 import javax.management.MBeanAttributeInfo JavaDoc;
19 import javax.management.MBeanException JavaDoc;
20 import javax.management.MBeanInfo JavaDoc;
21 import javax.management.MBeanOperationInfo JavaDoc;
22 import javax.management.MBeanParameterInfo JavaDoc;
23 import javax.management.MBeanServer JavaDoc;
24 import javax.management.MBeanServerFactory JavaDoc;
25 import javax.management.ObjectName JavaDoc;
26 import javax.management.ReflectionException JavaDoc;
27
28 import mx4j.AbstractDynamicMBean;
29 import test.MX4JTestCase;
30
31 /**
32  * @version $Revision: 1.5 $
33  */

34 public class AbstractDynamicMBeanTest extends MX4JTestCase
35 {
36    public AbstractDynamicMBeanTest(String JavaDoc s)
37    {
38       super(s);
39    }
40
41    public void testRegistration() throws Exception JavaDoc
42    {
43       MBeanServer JavaDoc server = MBeanServerFactory.newMBeanServer();
44       ObjectName JavaDoc name = new ObjectName JavaDoc("domain", "mbean", "dynamic");
45       Dynamic mbean = new Dynamic();
46       server.registerMBean(mbean, name);
47    }
48
49    public void testGetAttibuteForIsAttribute() throws Exception JavaDoc
50    {
51       MBeanServer JavaDoc server = MBeanServerFactory.newMBeanServer();
52       ObjectName JavaDoc name = new ObjectName JavaDoc("domain", "mbean", "dynamic");
53       Dynamic mbean = new Dynamic();
54       server.registerMBean(mbean, name);
55       Object JavaDoc result = server.getAttribute(name, "Running");
56       if (!((Boolean JavaDoc)result).booleanValue()) fail("getAttribute does not work");
57    }
58
59    public void testGetAttibuteForGetAttribute() throws Exception JavaDoc
60    {
61       MBeanServer JavaDoc server = MBeanServerFactory.newMBeanServer();
62       ObjectName JavaDoc name = new ObjectName JavaDoc("domain", "mbean", "dynamic");
63       Dynamic mbean = new Dynamic();
64       server.registerMBean(mbean, name);
65       Object JavaDoc result = server.getAttribute(name, "Name");
66       assertEquals(result, mbean.getName());
67    }
68
69    public void testGetAttibuteForPrimitiveType() throws Exception JavaDoc
70    {
71       MBeanServer JavaDoc server = MBeanServerFactory.newMBeanServer();
72       ObjectName JavaDoc name = new ObjectName JavaDoc("domain", "mbean", "dynamic");
73       DynamicDerived mbean = new DynamicDerived();
74       server.registerMBean(mbean, name);
75       Integer JavaDoc result = (Integer JavaDoc)server.getAttribute(name, "Status");
76       assertEquals(result.intValue(), mbean.getStatus());
77    }
78
79    public void testSetAttibute() throws Exception JavaDoc
80    {
81       MBeanServer JavaDoc server = MBeanServerFactory.newMBeanServer();
82       ObjectName JavaDoc name = new ObjectName JavaDoc("domain", "mbean", "dynamic");
83       Dynamic mbean = new Dynamic();
84       server.registerMBean(mbean, name);
85
86       String JavaDoc value = "simon";
87       server.setAttribute(name, new Attribute JavaDoc("Name", value));
88
89       assertEquals(value, mbean.getName());
90
91       Object JavaDoc result = server.getAttribute(name, "Name");
92       assertEquals(result, value);
93    }
94
95    public void testSetAttributeWithPrimitiveType() throws Exception JavaDoc
96    {
97       MBeanServer JavaDoc server = MBeanServerFactory.newMBeanServer();
98       ObjectName JavaDoc name = new ObjectName JavaDoc("domain", "mbean", "dynamic");
99       DynamicDerived mbean = new DynamicDerived();
100       server.registerMBean(mbean, name);
101
102       Integer JavaDoc value = new Integer JavaDoc(13);
103       server.setAttribute(name, new Attribute JavaDoc("Status", value));
104
105       Integer JavaDoc result = (Integer JavaDoc)server.getAttribute(name, "Status");
106       assertEquals(result.intValue(), value.intValue());
107    }
108
109    public void testSetAttributeWithNullValue() throws Exception JavaDoc
110    {
111       MBeanServer JavaDoc server = MBeanServerFactory.newMBeanServer();
112       ObjectName JavaDoc name = new ObjectName JavaDoc("domain", "mbean", "dynamic");
113       Dynamic mbean = new Dynamic();
114       server.registerMBean(mbean, name);
115
116       String JavaDoc value = null;
117       server.setAttribute(name, new Attribute JavaDoc("Name", value));
118
119       assertEquals(value, mbean.getName());
120
121       Object JavaDoc result = server.getAttribute(name, "Name");
122       assertEquals(result, value);
123    }
124
125    public void testOperation() throws Exception JavaDoc
126    {
127       MBeanServer JavaDoc server = MBeanServerFactory.newMBeanServer();
128       ObjectName JavaDoc name = new ObjectName JavaDoc("domain", "mbean", "dynamic");
129       Dynamic mbean = new Dynamic();
130       server.registerMBean(mbean, name);
131
132       String JavaDoc key = "key";
133       Object JavaDoc value = new Object JavaDoc();
134       List JavaDoc list = (List JavaDoc)server.invoke(name, "operation", new Object JavaDoc[]{key, value}, new String JavaDoc[]{String JavaDoc.class.getName(), Object JavaDoc.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 JavaDoc
141    {
142       MBeanServer JavaDoc server = MBeanServerFactory.newMBeanServer();
143       ObjectName JavaDoc name = new ObjectName JavaDoc("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 JavaDoc x)
153       {
154       }
155    }
156
157    public void testInvocationOfNonExistingSetter() throws Exception JavaDoc
158    {
159       MBeanServer JavaDoc server = MBeanServerFactory.newMBeanServer();
160       ObjectName JavaDoc name = new ObjectName JavaDoc("domain", "mbean", "dynamic");
161       Dynamic mbean = new Dynamic();
162       server.registerMBean(mbean, name);
163
164       try
165       {
166          server.setAttribute(name, new Attribute JavaDoc("Running", Boolean.FALSE));
167          fail("getMBeanInfo should not be invocable");
168       }
169       catch (ReflectionException JavaDoc x)
170       {
171       }
172    }
173
174    public void testComposedDynamicMBean() throws Exception JavaDoc
175    {
176       MBeanServer JavaDoc server = MBeanServerFactory.newMBeanServer();
177       ObjectName JavaDoc name = new ObjectName JavaDoc("domain", "mbean", "dynamic");
178       ComposedDynamicMBean mbean = new ComposedDynamicMBean();
179       server.registerMBean(mbean, name);
180
181       // Try to invoke an attribute
182
int value = 17;
183       mbean.setStatus(value);
184       Integer JavaDoc result = (Integer JavaDoc)server.getAttribute(name, "Status");
185       if (result.intValue() != value) fail("getAttribute does not work");
186
187       // Set the attribute
188
value = 3;
189       server.setAttribute(name, new Attribute JavaDoc("Status", new Integer JavaDoc(value)));
190       if (mbean.getStatus() != value) fail("setAttribute does not work");
191
192       // Invoke operations
193
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 JavaDoc m_name = "dummy";
204
205       protected MBeanAttributeInfo JavaDoc[] createMBeanAttributeInfo()
206       {
207          return new MBeanAttributeInfo JavaDoc[]
208          {
209             new MBeanAttributeInfo JavaDoc("Name", String JavaDoc.class.getName(), "The name", true, true, false),
210             new MBeanAttributeInfo JavaDoc("Running", boolean.class.getName(), "The running status", true, false, true)
211          };
212       }
213
214       protected MBeanOperationInfo JavaDoc[] createMBeanOperationInfo()
215       {
216          return new MBeanOperationInfo JavaDoc[]
217          {
218             new MBeanOperationInfo JavaDoc("operation", "An operation", new MBeanParameterInfo JavaDoc[]
219             {
220                new MBeanParameterInfo JavaDoc("key", String JavaDoc.class.getName(), "The key"),
221                new MBeanParameterInfo JavaDoc("value", Object JavaDoc.class.getName(), "The value")
222             }, List JavaDoc.class.getName(), MBeanOperationInfo.INFO)
223          };
224       }
225
226       public String JavaDoc getName()
227       {
228          return m_name;
229       }
230
231       public void setName(String JavaDoc name)
232       {
233          m_name = name;
234       }
235
236       public boolean isRunning()
237       {
238          return true;
239       }
240
241       public List JavaDoc operation(String JavaDoc key, Object JavaDoc value)
242       {
243          ArrayList JavaDoc list = new ArrayList JavaDoc();
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 JavaDoc[] createMBeanAttributeInfo()
255       {
256          MBeanAttributeInfo JavaDoc[] info = super.createMBeanAttributeInfo();
257          MBeanAttributeInfo JavaDoc[] newInfo = new MBeanAttributeInfo JavaDoc[info.length + 1];
258          System.arraycopy(info, 0, newInfo, 0, info.length);
259          newInfo[info.length] = new MBeanAttributeInfo JavaDoc("Status", int.class.getName(), "The status", true, true, false);
260          return newInfo;
261       }
262
263       public MBeanInfo JavaDoc getMBeanInfo()
264       {
265          // Disable caching
266
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 JavaDoc
281    {
282       private AbstractDynamicMBean delegate = new AbstractDynamicMBean()
283       {
284          protected MBeanAttributeInfo JavaDoc[] createMBeanAttributeInfo()
285          {
286             return new MBeanAttributeInfo JavaDoc[]
287             {
288                new MBeanAttributeInfo JavaDoc("Status", int.class.getName(), "The status", true, true, false),
289                new MBeanAttributeInfo JavaDoc("Enabled", boolean.class.getName(), "The enable status", true, false, true)
290             };
291          }
292
293          protected MBeanOperationInfo JavaDoc[] createMBeanOperationInfo()
294          {
295             return new MBeanOperationInfo JavaDoc[]
296             {
297                new MBeanOperationInfo JavaDoc("enable", "Enables this MBean", new MBeanParameterInfo JavaDoc[0], Void JavaDoc.class.getName(), MBeanOperationInfo.ACTION),
298                new MBeanOperationInfo JavaDoc("disable", "Disables this MBean", new MBeanParameterInfo JavaDoc[0], Void JavaDoc.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 JavaDoc getAttribute(String JavaDoc attribute) throws AttributeNotFoundException JavaDoc, MBeanException JavaDoc, ReflectionException JavaDoc
312       {
313          return delegate.getAttribute(attribute);
314       }
315
316       public AttributeList JavaDoc getAttributes(String JavaDoc[] attributes)
317       {
318          return delegate.getAttributes(attributes);
319       }
320
321       public MBeanInfo JavaDoc getMBeanInfo()
322       {
323          return delegate.getMBeanInfo();
324       }
325
326       public Object JavaDoc invoke(String JavaDoc method, Object JavaDoc[] arguments, String JavaDoc[] params) throws MBeanException JavaDoc, ReflectionException JavaDoc
327       {
328          return delegate.invoke(method, arguments, params);
329       }
330
331       public void setAttribute(Attribute JavaDoc attribute) throws AttributeNotFoundException JavaDoc, InvalidAttributeValueException JavaDoc, MBeanException JavaDoc, ReflectionException JavaDoc
332       {
333          delegate.setAttribute(attribute);
334       }
335
336       public AttributeList JavaDoc setAttributes(AttributeList JavaDoc 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