KickJava   Java API By Example, From Geeks To Geeks.

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


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.List JavaDoc;
13
14 import javax.management.ListenerNotFoundException JavaDoc;
15 import javax.management.MBeanServer JavaDoc;
16 import javax.management.Notification JavaDoc;
17 import javax.management.NotificationBroadcasterSupport JavaDoc;
18 import javax.management.NotificationFilter JavaDoc;
19 import javax.management.NotificationListener JavaDoc;
20 import javax.management.ObjectName JavaDoc;
21
22 import test.MX4JTestCase;
23 import test.MutableInteger;
24 import test.MutableObject;
25
26 /**
27  * @version $Revision: 1.1 $
28  */

29 public class NotificationListenerTest extends MX4JTestCase
30 {
31    public NotificationListenerTest(String JavaDoc name)
32    {
33       super(name);
34    }
35
36    public void testAddRemoveOneListenerOnOneMBean() throws Exception JavaDoc
37    {
38       MBeanServer JavaDoc server = newMBeanServer();
39       IdentityEmitter emitter = new IdentityEmitter();
40       ObjectName JavaDoc objectName = ObjectName.getInstance("test:type=emitter");
41       server.registerMBean(emitter, objectName);
42
43       final MutableObject source = new MutableObject(null);
44       NotificationListener JavaDoc listener = new NotificationListener JavaDoc()
45       {
46          public void handleNotification(Notification JavaDoc notification, Object JavaDoc handback)
47          {
48             source.set(notification.getSource());
49          }
50       };
51
52       server.addNotificationListener(objectName, listener, null, null);
53       assertEquals(emitter.getNotificationListeners().size(), 1);
54
55       Notification JavaDoc notification = new Notification JavaDoc("type", emitter, 0);
56       emitter.sendNotification(notification);
57       assertEquals(objectName, source.get());
58
59       server.removeNotificationListener(objectName, listener, null, null);
60       assertEquals(emitter.getNotificationListeners().size(), 0);
61    }
62
63    public void testAddRemoveOneListenerTwiceOnOneMBean() throws Exception JavaDoc
64    {
65       MBeanServer JavaDoc server = newMBeanServer();
66       IdentityEmitter emitter = new IdentityEmitter();
67       ObjectName JavaDoc objectName = ObjectName.getInstance("test:type=emitter");
68       server.registerMBean(emitter, objectName);
69
70       final MutableInteger count = new MutableInteger(0);
71       final MutableObject source = new MutableObject(null);
72       NotificationListener JavaDoc listener = new NotificationListener JavaDoc()
73       {
74          public void handleNotification(Notification JavaDoc notification, Object JavaDoc handback)
75          {
76             source.set(notification.getSource());
77             count.set(count.get() + 1);
78          }
79       };
80
81       // Add same listener twice, with different handbacks
82
Object JavaDoc handback = new Object JavaDoc();
83       server.addNotificationListener(objectName, listener, null, null);
84       server.addNotificationListener(objectName, listener, null, handback);
85       assertEquals(emitter.getNotificationListeners().size(), 2);
86
87       Notification JavaDoc notification = new Notification JavaDoc("type", emitter, 0);
88       emitter.sendNotification(notification);
89       assertEquals(objectName, source.get());
90       assertEquals(count.get(), 2);
91
92       server.removeNotificationListener(objectName, listener, null, null);
93       assertEquals(emitter.getNotificationListeners().size(), 1);
94
95       server.removeNotificationListener(objectName, listener, null, handback);
96       assertEquals(emitter.getNotificationListeners().size(), 0);
97    }
98
99    public void testAddRemoveTwoListenersOnOneMBean() throws Exception JavaDoc
100    {
101       MBeanServer JavaDoc server = newMBeanServer();
102       IdentityEmitter emitter = new IdentityEmitter();
103       ObjectName JavaDoc objectName = ObjectName.getInstance("test:type=emitter");
104       server.registerMBean(emitter, objectName);
105
106       NotificationListener JavaDoc listener1 = new NotificationListener JavaDoc()
107       {
108          public void handleNotification(Notification JavaDoc notification, Object JavaDoc handback)
109          {
110          }
111       };
112
113       NotificationListener JavaDoc listener2 = new NotificationListener JavaDoc()
114       {
115          public void handleNotification(Notification JavaDoc notification, Object JavaDoc handback)
116          {
117          }
118       };
119
120       server.addNotificationListener(objectName, listener1, null, null);
121       server.addNotificationListener(objectName, listener2, null, null);
122       assertEquals(emitter.getNotificationListeners().size(), 2);
123
124       server.removeNotificationListener(objectName, listener1, null, null);
125       assertEquals(emitter.getNotificationListeners().size(), 1);
126
127       server.removeNotificationListener(objectName, listener2, null, null);
128       assertEquals(emitter.getNotificationListeners().size(), 0);
129    }
130
131    public void testAddRemoveOneListenerOnTwoMBeans() throws Exception JavaDoc
132    {
133       MBeanServer JavaDoc server = newMBeanServer();
134       IdentityEmitter emitter1 = new IdentityEmitter();
135       ObjectName JavaDoc objectName1 = ObjectName.getInstance("test:type=emitter1");
136       server.registerMBean(emitter1, objectName1);
137       IdentityEmitter emitter2 = new IdentityEmitter();
138       ObjectName JavaDoc objectName2 = ObjectName.getInstance("test:type=emitter2");
139       server.registerMBean(emitter2, objectName2);
140
141       NotificationListener JavaDoc listener = new NotificationListener JavaDoc()
142       {
143          public void handleNotification(Notification JavaDoc notification, Object JavaDoc handback)
144          {
145          }
146       };
147
148       server.addNotificationListener(objectName1, listener, null, null);
149       assertEquals(emitter1.getNotificationListeners().size(), 1);
150       assertEquals(emitter2.getNotificationListeners().size(), 0);
151
152       server.addNotificationListener(objectName2, listener, null, null);
153       assertEquals(emitter1.getNotificationListeners().size(), 1);
154       assertEquals(emitter2.getNotificationListeners().size(), 1);
155
156       server.removeNotificationListener(objectName1, listener, null, null);
157       assertEquals(emitter1.getNotificationListeners().size(), 0);
158       assertEquals(emitter2.getNotificationListeners().size(), 1);
159
160       server.removeNotificationListener(objectName2, listener, null, null);
161       assertEquals(emitter1.getNotificationListeners().size(), 0);
162       assertEquals(emitter2.getNotificationListeners().size(), 0);
163    }
164
165    public interface IdentityEmitterMBean
166    {
167    }
168
169    public static class IdentityEmitter extends NotificationBroadcasterSupport JavaDoc implements IdentityEmitterMBean
170    {
171       private List JavaDoc listeners = new ArrayList JavaDoc();
172
173       public List JavaDoc getNotificationListeners()
174       {
175          return listeners;
176       }
177
178       public void addNotificationListener(NotificationListener JavaDoc listener, NotificationFilter JavaDoc filter, Object JavaDoc handback)
179       {
180          super.addNotificationListener(listener, filter, handback);
181          listeners.add(listener);
182       }
183
184       public void removeNotificationListener(NotificationListener JavaDoc listener, NotificationFilter JavaDoc filter, Object JavaDoc handback) throws ListenerNotFoundException JavaDoc
185       {
186          NotificationListener JavaDoc[] listens = (NotificationListener JavaDoc[])listeners.toArray(new NotificationListener JavaDoc[0]);
187          for (int i = 0; i < listens.length; i++)
188          {
189             NotificationListener JavaDoc listen = listens[i];
190             if (listen == listener)
191             {
192                super.removeNotificationListener(listener, filter, handback);
193                listeners.remove(listener);
194                return;
195             }
196          }
197          throw new ListenerNotFoundException JavaDoc();
198       }
199    }
200 }
201
Popular Tags