KickJava   Java API By Example, From Geeks To Geeks.

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


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 javax.management.MBeanServer JavaDoc;
13 import javax.management.ObjectName JavaDoc;
14
15 import mx4j.MX4JSystemKeys;
16 import test.MX4JTestCase;
17 import test.MutableInteger;
18
19 /**
20  * @version $Revision: 1.12 $
21  */

22 public class BCELMBeanInvokerTest extends MX4JTestCase
23 {
24    private int m_reps;
25    private int m_calls;
26
27    public BCELMBeanInvokerTest(String JavaDoc s)
28    {
29       super(s);
30    }
31
32    protected void setUp() throws Exception JavaDoc
33    {
34       m_reps = 10;
35       m_calls = 50000;
36    }
37
38    protected void tearDown() throws Exception JavaDoc
39    {
40       super.tearDown();
41    }
42
43    public void testReflectedAttributePerformance() throws Exception JavaDoc
44    {
45       String JavaDoc property = MX4JSystemKeys.MX4J_MBEAN_INVOKER;
46       System.setProperty(property, "mx4j.server.CachingReflectionMBeanInvoker");
47       MBeanServer JavaDoc server = newMBeanServer();
48       ObjectName JavaDoc name = new ObjectName JavaDoc("BCEL:test=performance,type=reflection");
49       try
50       {
51          MutableInteger integer = new MutableInteger(0);
52          BCELPerformance mbean = new BCELPerformance(integer);
53          server.registerMBean(mbean, name);
54
55          long[] results = new long[m_reps];
56          for (int i = 0; i < m_reps; ++i)
57          {
58             long start = System.currentTimeMillis();
59             for (int j = 0; j < m_calls; ++j)
60             {
61                server.getAttribute(name, "Test");
62             }
63             long end = System.currentTimeMillis();
64             results[i] = end - start;
65             System.out.println("Reflection result: " + results[i]);
66          }
67
68          if (integer.get() != m_calls * m_reps)
69          {
70             fail("MBean not called !");
71          }
72
73          long reflectionAverage = 0;
74          for (int i = 1; i < m_reps; ++i)
75          {
76             reflectionAverage += results[i];
77          }
78          reflectionAverage = reflectionAverage / (m_reps - 1);
79          System.out.println("Reflection Average for getAttribute = " + reflectionAverage);
80       }
81       finally
82       {
83          System.getProperties().remove(property);
84          server.unregisterMBean(name);
85       }
86    }
87
88    public void testReflectedOperationPerformance() throws Exception JavaDoc
89    {
90       String JavaDoc property = MX4JSystemKeys.MX4J_MBEAN_INVOKER;
91       System.setProperty(property, "mx4j.server.CachingReflectionMBeanInvoker");
92       MBeanServer JavaDoc server = newMBeanServer();
93       ObjectName JavaDoc name = new ObjectName JavaDoc("BCEL:test=performance,type=reflection");
94       try
95       {
96          MutableInteger integer = new MutableInteger(0);
97          BCELPerformance mbean = new BCELPerformance(integer);
98          server.registerMBean(mbean, name);
99
100          long[] results = new long[m_reps];
101          for (int i = 0; i < m_reps; ++i)
102          {
103             long start = System.currentTimeMillis();
104             for (int j = 0; j < m_calls; ++j)
105             {
106                server.invoke(name, "test", null, null);
107             }
108             long end = System.currentTimeMillis();
109             results[i] = end - start;
110             System.out.println("Reflection result: " + results[i]);
111          }
112
113          if (integer.get() != m_calls * m_reps)
114          {
115             fail("MBean not called !");
116          }
117
118          long reflectionAverage = 0;
119          for (int i = 1; i < m_reps; ++i)
120          {
121             reflectionAverage += results[i];
122          }
123          reflectionAverage = reflectionAverage / (m_reps - 1);
124          System.out.println("Reflection Average for invoke = " + reflectionAverage);
125       }
126       finally
127       {
128          System.getProperties().remove(property);
129          server.unregisterMBean(name);
130       }
131    }
132
133    public void testBCELAttributePerformance() throws Exception JavaDoc
134    {
135       // Be sure we use the BCEL invoker
136
System.getProperties().remove(MX4JSystemKeys.MX4J_MBEAN_INVOKER);
137
138       MBeanServer JavaDoc server = newMBeanServer();
139       ObjectName JavaDoc name = new ObjectName JavaDoc("BCEL:test=performance,type=direct");
140       try
141       {
142          MutableInteger integer = new MutableInteger(0);
143          BCELPerformance mbean = new BCELPerformance(integer);
144          server.registerMBean(mbean, name);
145
146          long[] results = new long[m_reps];
147          for (int i = 0; i < m_reps; ++i)
148          {
149             long start = System.currentTimeMillis();
150             for (int j = 0; j < m_calls; ++j)
151             {
152                server.getAttribute(name, "Test");
153             }
154             long end = System.currentTimeMillis();
155             results[i] = end - start;
156             System.out.println("Direct result: " + results[i]);
157          }
158
159          if (integer.get() != m_calls * m_reps)
160          {
161             fail("MBean not called !");
162          }
163
164          long directAverage = 0;
165          for (int i = 1; i < m_reps; ++i)
166          {
167             directAverage += results[i];
168          }
169          directAverage = directAverage / (m_reps - 1);
170          System.out.println("Direct Average for getAttribute = " + directAverage);
171       }
172       finally
173       {
174          server.unregisterMBean(name);
175       }
176    }
177
178    public void testBCELOperationPerformance() throws Exception JavaDoc
179    {
180       // Be sure we use the BCEL invoker
181
System.getProperties().remove(MX4JSystemKeys.MX4J_MBEAN_INVOKER);
182
183       MBeanServer JavaDoc server = newMBeanServer();
184       ObjectName JavaDoc name = new ObjectName JavaDoc("BCEL:test=performance,type=direct");
185       try
186       {
187          MutableInteger integer = new MutableInteger(0);
188          BCELPerformance mbean = new BCELPerformance(integer);
189          server.registerMBean(mbean, name);
190
191          long[] results = new long[m_reps];
192          for (int i = 0; i < m_reps; ++i)
193          {
194             long start = System.currentTimeMillis();
195             for (int j = 0; j < m_calls; ++j)
196             {
197                server.invoke(name, "test", null, null);
198             }
199             long end = System.currentTimeMillis();
200             results[i] = end - start;
201             System.out.println("Direct result: " + results[i]);
202          }
203
204          if (integer.get() != m_calls * m_reps)
205          {
206             fail("MBean not called !");
207          }
208
209          long directAverage = 0;
210          for (int i = 1; i < m_reps; ++i)
211          {
212             directAverage += results[i];
213          }
214          directAverage = directAverage / (m_reps - 1);
215          System.out.println("Direct Average for invoke = " + directAverage);
216       }
217       finally
218       {
219          server.unregisterMBean(name);
220       }
221    }
222
223    public void testPlainReflectionPerformance() throws Exception JavaDoc
224    {
225       MutableInteger integer = new MutableInteger(0);
226       BCELPerformance mbean = new BCELPerformance(integer);
227       Method JavaDoc test = mbean.getClass().getMethod("test", (Class JavaDoc[])null);
228
229       int factor = 100;
230       int calls = m_calls * factor;
231
232       long[] results = new long[m_reps];
233       for (int i = 0; i < m_reps; ++i)
234       {
235          long start = System.currentTimeMillis();
236          for (int j = 0; j < calls; ++j)
237          {
238             test.invoke(mbean, (Object JavaDoc[])null);
239          }
240          long end = System.currentTimeMillis();
241          results[i] = end - start;
242          System.out.println("Plain reflection: " + (results[i] / factor));
243       }
244
245       if (integer.get() != calls * m_reps)
246       {
247          fail("MBean not called !");
248       }
249
250       long directAverage = 0;
251       for (int i = 1; i < m_reps; ++i)
252       {
253          directAverage += results[i];
254       }
255       directAverage = directAverage / (m_reps - 1);
256       System.out.println("Plain average = " + (directAverage / factor));
257    }
258
259    public void testBCELPackagePrivate() throws Exception JavaDoc
260    {
261       // Be sure we use the BCEL invoker
262
System.getProperties().remove(MX4JSystemKeys.MX4J_MBEAN_INVOKER);
263
264       MBeanServer JavaDoc server = newMBeanServer();
265       ObjectName JavaDoc name = new ObjectName JavaDoc("BCEL:test=package,type=direct");
266       try
267       {
268          MutableInteger integer = new MutableInteger(0);
269          BCELPerformance mbean = new BCELPerformance(integer);
270          server.registerMBean(mbean, name);
271
272          PackagePrivate arg = new PackagePrivate();
273
274          server.invoke(name, "testPackagePrivate", new Object JavaDoc[]{arg}, new String JavaDoc[]{arg.getClass().getName()});
275
276          if (integer.get() != 1)
277          {
278             fail("MBean not called !");
279          }
280       }
281       finally
282       {
283          server.unregisterMBean(name);
284       }
285    }
286
287    public interface BCELPerformanceMBean
288    {
289       public void test();
290
291       public int getTest();
292
293       public void testPackagePrivate(PackagePrivate param);
294    }
295
296    class PackagePrivate
297    {
298    }
299
300    public static class BCELPerformance implements BCELPerformanceMBean
301    {
302       private MutableInteger m_integer;
303
304       public BCELPerformance(MutableInteger integer)
305       {
306          m_integer = integer;
307       }
308
309       public void test()
310       {
311          m_integer.set(m_integer.get() + 1);
312       }
313
314       public int getTest()
315       {
316          m_integer.set(m_integer.get() + 1);
317          return 0;
318       }
319
320       public void testPackagePrivate(PackagePrivate param)
321       {
322          m_integer.set(m_integer.get() + 1);
323       }
324    }
325 }
326
Popular Tags