KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > mx4j > server > MX4JMBeanServerTest


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.server;
10
11 import java.lang.reflect.Method JavaDoc;
12 import java.net.URL JavaDoc;
13 import java.util.Iterator JavaDoc;
14 import javax.management.Attribute JavaDoc;
15 import javax.management.AttributeList JavaDoc;
16 import javax.management.AttributeNotFoundException JavaDoc;
17 import javax.management.MBeanException JavaDoc;
18 import javax.management.MBeanInfo JavaDoc;
19 import javax.management.MBeanServer JavaDoc;
20 import javax.management.ObjectName JavaDoc;
21 import javax.management.ReflectionException JavaDoc;
22 import javax.management.loading.MLet JavaDoc;
23
24 import mx4j.MBeanDescriptionAdapter;
25 import mx4j.MX4JSystemKeys;
26 import mx4j.server.MBeanMetaData;
27 import mx4j.server.MBeanRepository;
28 import mx4j.server.interceptor.DefaultMBeanServerInterceptor;
29 import mx4j.server.interceptor.MBeanServerInterceptor;
30 import mx4j.server.interceptor.MBeanServerInterceptorConfigurator;
31 import test.MX4JTestCase;
32 import test.MutableInteger;
33
34 /**
35  * @version $Revision: 1.3 $
36  */

37 public class MX4JMBeanServerTest extends MX4JTestCase
38 {
39    public MX4JMBeanServerTest(String JavaDoc s)
40    {
41       super(s);
42    }
43
44    public void testCustomMBeanRepository() throws Exception JavaDoc
45    {
46       String JavaDoc property = MX4JSystemKeys.MX4J_MBEANSERVER_REPOSITORY;
47       try
48       {
49          System.setProperty(property, MX4JMBeanServerTest.TestMBeanRepository.class.getName());
50          MBeanServer JavaDoc server = newMBeanServer();
51          Method JavaDoc method = server.getClass().getDeclaredMethod("getMBeanRepository", new Class JavaDoc[0]);
52          method.setAccessible(true);
53          Object JavaDoc repository = method.invoke(server, new Object JavaDoc[0]);
54          if (!(repository instanceof TestMBeanRepository)) fail("Custom Repository does not work");
55       }
56       finally
57       {
58          System.getProperties().remove(property);
59       }
60    }
61
62    public void testContextClassLoaderOnMethodCalls() throws Exception JavaDoc
63    {
64       // Create the appropriate class loader hierarchy
65
URL JavaDoc testCodebase = getClass().getProtectionDomain().getCodeSource().getLocation();
66       URL JavaDoc implCodebase = MBeanServer JavaDoc.class.getProtectionDomain().getCodeSource().getLocation();
67       MLet JavaDoc mlet = new MLet JavaDoc(new URL JavaDoc[]{testCodebase, implCodebase}, getClass().getClassLoader().getParent());
68       MBeanServer JavaDoc server = newMBeanServer();
69
70       // Register the MLet loader
71
ObjectName JavaDoc loader = new ObjectName JavaDoc(":mbean=loader");
72       server.registerMBean(mlet, loader);
73
74       // Be sure the context classloader interceptor is enabled
75
server.setAttribute(ObjectName.getInstance("JMImplementation", "interceptor", "contextclassloader"), new Attribute JavaDoc("Enabled", Boolean.TRUE));
76
77       // Register the MBean
78
ObjectName JavaDoc name = new ObjectName JavaDoc("Test:mbean=ccl");
79       server.createMBean("test.mx4j.server.MX4JMBeanServerTest$CCL", name, loader, null, null);
80
81       server.invoke(name, "method", null, null);
82    }
83
84    public void testAddRemoveMBeanServerInterceptor() throws Exception JavaDoc
85    {
86       MBeanServer JavaDoc server = newMBeanServer();
87       ObjectName JavaDoc configurator = new ObjectName JavaDoc(MBeanServerInterceptorConfigurator.OBJECT_NAME);
88
89       MutableInteger integer = new MutableInteger(0);
90       TestMBeanServerInterceptor tester = new TestMBeanServerInterceptor(integer);
91       server.invoke(configurator, "addInterceptor", new Object JavaDoc[]{tester}, new String JavaDoc[]{MBeanServerInterceptor.class.getName()});
92
93       server.getAttribute(configurator, "Running");
94       if (integer.get() != 1) fail("Interceptor not installed");
95
96       server.invoke(configurator, "clearInterceptors", null, null);
97       server.getAttribute(configurator, "Running");
98
99       // Be sure the interceptor is not anymore in the chain
100
if (integer.get() != 1) fail("Interceptor not removed");
101    }
102
103    public void testRegisterRemoveMBeanServerInterceptor() throws Exception JavaDoc
104    {
105       MBeanServer JavaDoc server = newMBeanServer();
106       ObjectName JavaDoc configurator = new ObjectName JavaDoc(MBeanServerInterceptorConfigurator.OBJECT_NAME);
107
108       MutableInteger integer = new MutableInteger(0);
109       TestMBeanServerInterceptor tester = new TestMBeanServerInterceptor(integer);
110       ObjectName JavaDoc name = new ObjectName JavaDoc("Interceptor:category=MBeanServer,type=Test");
111       server.invoke(configurator, "registerInterceptor", new Object JavaDoc[]{tester, name}, new String JavaDoc[]{MBeanServerInterceptor.class.getName(), ObjectName JavaDoc.class.getName()});
112
113       server.getMBeanInfo(configurator);
114       if (integer.get() != 1) fail("Interceptor not installed");
115
116       // Let's check if the interceptor is registered, let's change something in it
117
server.setAttribute(name, new Attribute JavaDoc("Enabled", Boolean.FALSE));
118
119       // Call again
120
server.getMBeanInfo(configurator);
121       if (integer.get() != 1) fail("Interceptor not registered");
122
123       AttributeList JavaDoc list = new AttributeList JavaDoc();
124       list.add(new Attribute JavaDoc("Enabled", Boolean.TRUE));
125       server.setAttributes(name, list);
126
127       server.getMBeanInfo(configurator);
128       if (integer.get() != 2) fail("Interceptor not enabled");
129
130       server.invoke(configurator, "clearInterceptors", null, null);
131       server.getAttribute(configurator, "Running");
132
133       // Be sure the interceptor is not anymore in the chain
134
if (integer.get() != 2) fail("Interceptor not removed");
135    }
136
137    public void testMBeanDescription() throws Exception JavaDoc
138    {
139       MBeanServer JavaDoc server = newMBeanServer();
140       ObjectName JavaDoc name = ObjectName.getInstance(":mbean=description");
141       server.registerMBean(new Description(), name);
142       MBeanInfo JavaDoc info = server.getMBeanInfo(name);
143       assertEquals(info.getDescription(), new DescriptionMBeanDescription().getMBeanDescription());
144    }
145
146    public interface DescriptionMBean
147    {
148    }
149
150    public static class Description implements DescriptionMBean
151    {
152    }
153
154    public static class DescriptionMBeanDescription extends MBeanDescriptionAdapter
155    {
156       public String JavaDoc getMBeanDescription()
157       {
158          return "test";
159       }
160    }
161
162    public static class TestMBeanServerInterceptor extends DefaultMBeanServerInterceptor
163    {
164       private MutableInteger m_integer;
165
166       public TestMBeanServerInterceptor(MutableInteger integer)
167       {
168          m_integer = integer;
169       }
170
171       public String JavaDoc getType()
172       {
173          return "test";
174       }
175
176       public Object JavaDoc getAttribute(MBeanMetaData metadata, String JavaDoc attribute) throws MBeanException JavaDoc, AttributeNotFoundException JavaDoc, ReflectionException JavaDoc
177       {
178          if (isEnabled()) m_integer.set(m_integer.get() + 1);
179          return super.getAttribute(metadata, attribute);
180       }
181
182       public MBeanInfo JavaDoc getMBeanInfo(MBeanMetaData metadata)
183       {
184          if (isEnabled()) m_integer.set(m_integer.get() + 1);
185          return super.getMBeanInfo(metadata);
186       }
187    }
188
189    public static class TestMBeanRepository implements MBeanRepository
190    {
191       public MBeanMetaData get(ObjectName JavaDoc name)
192       {
193          return null;
194       }
195
196       public void put(ObjectName JavaDoc name, MBeanMetaData metadata)
197       {
198       }
199
200       public void remove(ObjectName JavaDoc name)
201       {
202       }
203
204       public int size()
205       {
206          return 0;
207       }
208
209       public Iterator JavaDoc iterator()
210       {
211          return null;
212       }
213
214       public Object JavaDoc clone()
215       {
216          return null;
217       }
218    }
219
220    public interface CCLMBean
221    {
222       public void method();
223    }
224
225    public static class CCL implements CCLMBean
226    {
227       public CCL()
228       {
229          ClassLoader JavaDoc cl = Thread.currentThread().getContextClassLoader();
230          String JavaDoc loaderClass = cl.getClass().getName();
231          if (!loaderClass.endsWith("MLet"))
232          {
233             throw new RuntimeException JavaDoc();
234          }
235       }
236
237       public void method()
238       {
239          ClassLoader JavaDoc cl = Thread.currentThread().getContextClassLoader();
240          String JavaDoc loaderClass = cl.getClass().getName();
241          if (!loaderClass.endsWith("MLet"))
242          {
243             throw new RuntimeException JavaDoc();
244          }
245       }
246    }
247 }
248
Popular Tags