KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > javax > management > MultiThreadMBeanServerTest


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.javax.management;
10
11 import java.util.ArrayList JavaDoc;
12 import java.util.Iterator JavaDoc;
13 import java.util.List JavaDoc;
14 import java.util.Set JavaDoc;
15 import javax.management.InstanceNotFoundException JavaDoc;
16 import javax.management.MBeanServerConnection JavaDoc;
17 import javax.management.MBeanServerDelegate JavaDoc;
18 import javax.management.Notification JavaDoc;
19 import javax.management.NotificationListener JavaDoc;
20 import javax.management.ObjectInstance JavaDoc;
21 import javax.management.ObjectName JavaDoc;
22 import javax.management.loading.MLet JavaDoc;
23 import javax.management.timer.Timer JavaDoc;
24
25 import test.MX4JTestCase;
26 import test.MultiThreadTestRunner;
27
28 /**
29  * @version $Revision: 1.4 $
30  */

31 public class MultiThreadMBeanServerTest extends MX4JTestCase
32 {
33    protected MBeanServerConnection JavaDoc server;
34
35    public MultiThreadMBeanServerTest(String JavaDoc s)
36    {
37       super(s);
38    }
39
40    protected void setUp() throws Exception JavaDoc
41    {
42       server = newMBeanServer();
43    }
44
45    protected void tearDown() throws Exception JavaDoc
46    {
47       server = null;
48    }
49
50    public void testAddRemoveNotifyListeners() throws Exception JavaDoc
51    {
52       final ObjectName JavaDoc delegateName = ObjectName.getInstance("JMImplementation:type=MBeanServerDelegate");
53
54       MultiThreadTestRunner.Test test = new MultiThreadTestRunner.Test()
55       {
56          public void test() throws Exception JavaDoc
57          {
58             final List JavaDoc notifications = new ArrayList JavaDoc();
59             NotificationListener JavaDoc listener = new NotificationListener JavaDoc()
60             {
61                public void handleNotification(Notification JavaDoc notification, Object JavaDoc handback)
62                {
63                   synchronized (notifications)
64                   {
65                      notifications.add(notification);
66                   }
67                }
68             };
69
70             // Add the listener
71
server.addNotificationListener(delegateName, listener, null, null);
72
73             // Emit a notification
74
ObjectName JavaDoc mletName = ObjectName.getInstance(":name=" + new Object JavaDoc().hashCode());
75             server.createMBean(MLet JavaDoc.class.getName(), mletName, null);
76
77             // Emit another notification
78
server.unregisterMBean(mletName);
79
80             // Remove the listener
81
server.removeNotificationListener(delegateName, listener, null, null);
82          }
83       };
84
85       MultiThreadTestRunner runner = new MultiThreadTestRunner(50, 10);
86       runner.run(test);
87    }
88
89    public void testRegisterUnregisterQueryMBeans() throws Exception JavaDoc
90    {
91       MultiThreadTestRunner.Test test = new MultiThreadTestRunner.Test()
92       {
93          public void test() throws Exception JavaDoc
94          {
95             Set JavaDoc names = server.queryNames(null, null);
96
97             for (Iterator JavaDoc i = names.iterator(); i.hasNext();)
98             {
99                ObjectName JavaDoc name = (ObjectName JavaDoc)i.next();
100                try
101                {
102                   if (server.isInstanceOf(name, MBeanServerDelegate JavaDoc.class.getName()))
103                   {
104                      server.getAttribute(name, "ImplementationVendor");
105                   }
106                }
107                catch (InstanceNotFoundException JavaDoc ignored)
108                {
109                   // The Timer may be unregistered by another thread
110
}
111             }
112
113             ObjectName JavaDoc timerName = ObjectName.getInstance(":timer=" + new Object JavaDoc().hashCode());
114             server.createMBean(Timer JavaDoc.class.getName(), timerName, null);
115
116             Set JavaDoc mbeans = server.queryMBeans(new ObjectName JavaDoc("JMImplementation:*"), null);
117
118             for (Iterator JavaDoc i = mbeans.iterator(); i.hasNext();)
119             {
120                ObjectInstance JavaDoc instance = (ObjectInstance JavaDoc)i.next();
121                try
122                {
123                   if (server.isInstanceOf(instance.getObjectName(), MBeanServerDelegate JavaDoc.class.getName()))
124                   {
125                      server.getAttribute(instance.getObjectName(), "ImplementationVendor");
126                   }
127                }
128                catch (InstanceNotFoundException JavaDoc ignored)
129                {
130                   // The Timer may be unregistered by another thread
131
}
132             }
133
134             server.unregisterMBean(timerName);
135          }
136       };
137
138       MultiThreadTestRunner runner = new MultiThreadTestRunner(50, 10);
139       runner.run(test);
140    }
141 }
142
Popular Tags