User: ejort
Date: 02/04/14 08:29:42
Modified: src/main/test/compliance/server MBeanServerTEST.java
Log:
MBeanServer notification tests
Revision Changes Path
1.13 +620 -88 jmx/src/main/test/compliance/server/MBeanServerTEST.java
Index: MBeanServerTEST.java
===================================================================
RCS file: /cvsroot/jboss/jmx/src/main/test/compliance/server/MBeanServerTEST.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- MBeanServerTEST.java 10 Apr 2002 23:17:24 -0000 1.12
+++ MBeanServerTEST.java 14 Apr 2002 15:29:42 -0000 1.13
@@ -32,6 +32,18 @@
import javax.management.loading.MLet;
+import test.compliance.server.support.BabarError;
+import test.compliance.server.support.Broadcaster;
+import test.compliance.server.support.ExceptionOnTheRun;
+import test.compliance.server.support.Listener;
+import test.compliance.server.support.LockedTest;
+import test.compliance.server.support.LockedTestMBean;
+import test.compliance.server.support.LockedTest2;
+import test.compliance.server.support.LockedTest2MBean;
+import test.compliance.server.support.LockedTest3;
+import test.compliance.server.support.LockedTest3MBean;
+import test.compliance.server.support.MBeanListener;
+import test.compliance.server.support.MyScreamingException;
import test.compliance.server.support.Test;
import test.compliance.server.support.TestMBean;
import test.compliance.server.support.Test2;
@@ -40,21 +52,12 @@
import test.compliance.server.support.Test3MBean;
import test.compliance.server.support.Test4;
import test.compliance.server.support.Test4MBean;
-import test.compliance.server.support.LockedTest;
-import test.compliance.server.support.LockedTestMBean;
-import test.compliance.server.support.LockedTest2;
-import test.compliance.server.support.LockedTest2MBean;
-import test.compliance.server.support.LockedTest3;
-import test.compliance.server.support.LockedTest3MBean;
-import test.compliance.server.support.MyScreamingException;
-import test.compliance.server.support.ExceptionOnTheRun;
-import test.compliance.server.support.BabarError;
/**
* Tests the MBean server impl. through the <tt>MBeanServer</tt> interface.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Juha Lindfors</a>.
- * @version $Revision: 1.12 $
+ * @version $Revision: 1.13 $
*
*/
public class MBeanServerTEST
@@ -77,7 +80,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName(":test=test");
server.registerMBean(new Test(), name);
@@ -90,7 +93,7 @@
//
System.setProperty("jbossmx.optimized.dispatcher", "true");
- server = MBeanServerFactory.createMBeanServer();
+ server = MBeanServerFactory.newMBeanServer();
name = new ObjectName(":test=test");
server.registerMBean(new Test(), name);
@@ -123,7 +126,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName(":test=test");
server.registerMBean(new Test(), name);
@@ -136,7 +139,7 @@
//
System.setProperty("jbossmx.optimized.dispatcher", "true");
- server = MBeanServerFactory.createMBeanServer();
+ server = MBeanServerFactory.newMBeanServer();
name = new ObjectName(":test=test");
server.registerMBean(new Test(), name);
@@ -169,7 +172,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName(":test=test");
server.registerMBean(new Test(), name);
@@ -182,7 +185,7 @@
//
System.setProperty("jbossmx.optimized.dispatcher", "true");
- server = MBeanServerFactory.createMBeanServer();
+ server = MBeanServerFactory.newMBeanServer();
name = new ObjectName(":test=test");
server.registerMBean(new Test(), name);
@@ -215,7 +218,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName(":test=test");
server.registerMBean(new Test(), name);
@@ -233,7 +236,7 @@
//
System.setProperty("jbossmx.optimized.dispatcher", "true");
- server = MBeanServerFactory.createMBeanServer();
+ server = MBeanServerFactory.newMBeanServer();
name = new ObjectName(":test=test");
server.registerMBean(new Test(), name);
@@ -268,7 +271,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
server.invoke(new ObjectName(":mbean=doesnotexist"), "noMethod", null,
null);
// should not reach here
@@ -296,7 +299,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:test=test");
server.registerMBean(new Test(), name);
@@ -327,7 +330,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object foo = server.getAttribute(new
ObjectName("JMImplementation:type=MBeanServerDelegate"), "Foo");
// should not reach here
@@ -351,7 +354,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:test=test");
server.registerMBean(new Test(), name);
@@ -379,7 +382,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:name=DoesNotExist");
server.getAttribute(name, "Whatever");
@@ -405,7 +408,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:test=test");
server.registerMBean(new Test(), name);
@@ -433,7 +436,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:test=test");
server.registerMBean(new Test(), name);
@@ -464,7 +467,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
server.setAttribute(new
ObjectName("JMImplementation:type=MBeanServerDelegate"), new Attribute("Foo",
"value"));
// should not reach here
@@ -488,7 +491,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:test=test");
server.registerMBean(new Test(), name);
@@ -516,7 +519,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:name=DoesNotExist");
server.setAttribute(name, new Attribute("Whatever", "nothing"));
@@ -542,7 +545,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:test=test");
server.registerMBean(new Test(), name);
@@ -570,7 +573,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:test=test");
server.registerMBean(new Test(), name);
@@ -602,7 +605,7 @@
*/
public void testInstantiateWithDefaultConstructor() throws Exception
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o = server.instantiate("test.compliance.server.support.Test");
assertTrue(o instanceof test.compliance.server.support.Test);
@@ -616,7 +619,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o =
server.instantiate("test.compliance.server.support.ConstructorTest");
// shouldn't get here
@@ -636,7 +639,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o =
server.instantiate("test.compliance.server.support.ConstructorTest2");
// shouldn't get here
@@ -656,7 +659,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o =
server.instantiate("test.compliance.server.support.ConstructorTest3");
// shouldn't get here
@@ -676,7 +679,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
// FAILS IN RI
try
@@ -713,7 +716,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
// FAILS IN RI
try
@@ -749,7 +752,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o = server.instantiate("foo.Bar");
// should not get here
@@ -769,7 +772,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o =
server.instantiate("test.compliance.server.support.ConstructorTest6");
// should not get here
@@ -788,7 +791,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o =
server.instantiate("test.compliance.server.support.ConstructorTest7");
// should not get here
@@ -808,7 +811,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o = server.instantiate(null);
// should not reach here
@@ -831,7 +834,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o = server.instantiate("");
// should not reach here
@@ -854,7 +857,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o = server.instantiate(null, null);
// should not reach here
@@ -877,7 +880,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o = server.instantiate("", null);
// should not reach here
@@ -901,7 +904,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o = server.instantiate(null, null, null);
// should not reach here
@@ -924,7 +927,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o = server.instantiate("", null, null);
// should not reach here
@@ -948,7 +951,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o = server.instantiate(null, null, null, null);
// should not reach here
@@ -971,7 +974,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
Object o = server.instantiate("", null, null, null);
// should not reach here
@@ -995,7 +998,7 @@
// NOTE:
// the urls used here are relative to the location of the build.xml
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
MLet mlet = new MLet();
// mlet cl to DLR
@@ -1020,7 +1023,7 @@
// NOTE:
// the urls used here are relative to the location of the build.xml
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
MLet mlet = new MLet();
// mlet cl to DLR
@@ -1057,7 +1060,7 @@
boolean caught = false;
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
server.registerMBean(new Test(), null);
}
catch (RuntimeOperationsException e)
@@ -1083,7 +1086,7 @@
boolean caught = false;
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
server.registerMBean(new Test(), new ObjectName("Domai?:type=test"));
}
catch (RuntimeOperationsException e)
@@ -1109,7 +1112,7 @@
boolean caught = false;
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
server.registerMBean(new Test(), new
ObjectName("JMImplementation:type=test"));
}
catch (RuntimeOperationsException e)
@@ -1135,7 +1138,7 @@
boolean caught = false;
try
{
- MBeanServer server =
MBeanServerFactory.createMBeanServer("JMImplementation");
+ MBeanServer server =
MBeanServerFactory.newMBeanServer("JMImplementation");
server.registerMBean(new Test(), new ObjectName(":type=test"));
}
catch (RuntimeOperationsException e)
@@ -1159,7 +1162,7 @@
*/
public void testRegisterMBeanOnExceptionFromPreRegister() throws Exception
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:foo=bar");
try
@@ -1186,7 +1189,7 @@
*/
public void testRegisterMBeanOnExceptionFromPreRegister2() throws Exception
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:foo=bar");
try
@@ -1210,7 +1213,7 @@
*/
public void testRegisterMBeanOnExceptionFromPreRegister3() throws Exception
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:foo=bar");
try
@@ -1239,7 +1242,7 @@
boolean caught = false;
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
server.unregisterMBean(new
ObjectName("JMImplementation:type=MBeanServerDelegate"));
}
// REVIEW: This exception type isn't specified, but it is logical
@@ -1262,7 +1265,7 @@
*/
public void testBasicUnregister() throws Exception
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:foo=bar");
server.registerMBean(new Test(), name);
@@ -1276,7 +1279,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName(":foo=bar");
server.registerMBean(new Test(), name);
@@ -1298,7 +1301,7 @@
{
try
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName(":foo=bar");
ObjectInstance oi = server.registerMBean(new Test(), name);
@@ -1321,7 +1324,7 @@
*/
public void testUnregisterMBeanOnExceptionFromPreDeregister() throws Exception
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:foo=bar");
server.registerMBean(new LockedTest(), name);
@@ -1353,7 +1356,7 @@
*/
public void testUnregisterMBeanOnExceptionFromPreDeregister2() throws Exception
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:foo=bar");
server.registerMBean(new LockedTest2(), name);
@@ -1381,7 +1384,7 @@
*/
public void testUnregisterMBeanOnExceptionFromPreDeregister3() throws Exception
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
ObjectName name = new ObjectName("test:foo=bar");
server.registerMBean(new LockedTest3(), name);
@@ -1401,14 +1404,14 @@
}
}
- // MBeanServer addNotificationListener --------------------------
+ // MBeanServer NotificationListener Plain -----------------------
/**
* Tests basic listener registration to server delegate
*/
public synchronized void testAddNotificationListenerToDelegate() throws Exception
{
- MBeanServer server = MBeanServerFactory.createMBeanServer();
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
class MyNotificationListener implements NotificationListener {
@@ -1422,15 +1425,7 @@
assertTrue(handback instanceof String);
assertTrue(handback.equals("MyHandback"));
-
- try
- {
- assertTrue(notification.getSource().equals(new
ObjectName("JMImplementation:type=MBeanServerDelegate")));
- }
- catch (AssertionFailedError e)
- {
- fail("FAILS IN JBOSSMX: notification source for listeners
registered through the agent should be an object name of the source; JBossMX returns "
+ notification.getSource());
- }
+ assertTrue(notification.getSource().equals(new
ObjectName("JMImplementation:type=MBeanServerDelegate")));
}
catch (Exception e)
{
@@ -1452,29 +1447,566 @@
// force notification
server.registerMBean(new Test(), new ObjectName(":foo=bar"));
- // wait for notif to arrive max 5 secs
- for (int i = 0; i < 10; ++i)
+ assertTrue(listener.notificationCount == 1);
+ }
+
+ /**
+ * Tests multiple listeners with different handbacks
+ */
+ public synchronized void testAddMultipleListeners()
+ throws Exception
+ {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ class MyNotificationListener implements NotificationListener
{
- wait(500);
-
- if (listener.notificationCount > 0)
- break;
+ Object handback;
+ int result = 0;
+ public MyNotificationListener(Object handback)
+ {
+ this.handback = handback;
+ }
+ public void handleNotification(Notification notification, Object handback)
+ {
+ result++;
+ assertEquals(this.handback, handback);
+ result++;
+ }
+ }
+
+ MyNotificationListener listener1 = new MyNotificationListener("handback1");
+ MyNotificationListener listener2 = new MyNotificationListener("handback2");
+
+ server.addNotificationListener(
+ new ObjectName("JMImplementation:type=MBeanServerDelegate"),
+ listener1, null, "handback1"
+ );
+ server.addNotificationListener(
+ new ObjectName("JMImplementation:type=MBeanServerDelegate"),
+ listener2, null, "handback2"
+ );
+
+ // force notification
+ server.registerMBean(new Test(), new ObjectName(":foo=bar"));
+
+ assertTrue(listener1.result == 2);
+ assertTrue(listener2.result == 2);
+ }
+
+ /**
+ * Tests one listener multiple handbacks
+ */
+ public synchronized void testAddListenerMultipleHandbacks()
+ throws Exception
+ {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ class MyNotificationListener implements NotificationListener
+ {
+ boolean result1 = false;
+ boolean result2 = false;
+ public void handleNotification(Notification notification, Object handback)
+ {
+ if (handback.equals("handback1"))
+ result1 = true;
+ else if (handback.equals("handback2"))
+ result2 = true;
+ else
+ fail("Unexpected handback: " + handback);
+ }
+ }
+
+ MyNotificationListener listener = new MyNotificationListener();
+
+ server.addNotificationListener(
+ new ObjectName("JMImplementation:type=MBeanServerDelegate"),
+ listener, null, "handback1"
+ );
+ server.addNotificationListener(
+ new ObjectName("JMImplementation:type=MBeanServerDelegate"),
+ listener, null, "handback2"
+ );
+
+ // force notification
+ server.registerMBean(new Test(), new ObjectName(":foo=bar"));
+
+ assertTrue(listener.result1);
+ assertTrue(listener.result2);
+ }
+
+ /**
+ * Tests removing a notification listener including multiple handbacks
+ */
+ public synchronized void testRemoveListener()
+ throws Exception
+ {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ class MyNotificationListener implements NotificationListener
+ {
+ Object handback;
+ int result = 0;
+ public MyNotificationListener(Object handback)
+ {
+ this.handback = handback;
+ }
+ public void handleNotification(Notification notification, Object handback)
+ {
+ result++;
+ assertEquals(this.handback, handback);
+ result++;
+ }
}
+ class MyOtherNotificationListener implements NotificationListener
+ {
+ boolean result1 = false;
+ boolean result2 = false;
+ public void handleNotification(Notification notification, Object handback)
+ {
+ if (handback.equals("handback1"))
+ result1 = true;
+ else if (handback.equals("handback2"))
+ result2 = true;
+ else
+ fail("Unexpected handback: " + handback);
+ }
+ }
+
+ MyNotificationListener listener1 = new MyNotificationListener("handback1");
+ MyOtherNotificationListener listener2 = new MyOtherNotificationListener();
+
+ server.addNotificationListener(
+ new ObjectName("JMImplementation:type=MBeanServerDelegate"),
+ listener1, null, "handback1"
+ );
+ server.addNotificationListener(
+ new ObjectName("JMImplementation:type=MBeanServerDelegate"),
+ listener2, null, "handback2"
+ );
+ server.addNotificationListener(
+ new ObjectName("JMImplementation:type=MBeanServerDelegate"),
+ listener2, null, "handback3"
+ );
+ server.removeNotificationListener(
+ new ObjectName("JMImplementation:type=MBeanServerDelegate"),
+ listener2
+ );
+
+ // force notification
+ server.registerMBean(new Test(), new ObjectName(":foo=bar"));
+
+ assertTrue(listener1.result == 2);
+ assertTrue(listener2.result1 == false);
+ assertTrue(listener2.result2 == false);
+ }
+
+ /**
+ * Tests removing a broadcaster
+ */
+ public synchronized void testRemoveBroadcaster()
+ throws Exception
+ {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ class MyNotificationListener implements NotificationListener
+ {
+ long result = 0;
+ public MyNotificationListener()
+ {
+ }
+ public void handleNotification(Notification notification, Object handback)
+ {
+ result = notification.getSequenceNumber();
+ }
+ }
+
+ // Register the broadcaster
+ ObjectName broadcasterName = new ObjectName("test:type=broadcaster");
+ Broadcaster broadcaster = new Broadcaster();
+ server.registerMBean(broadcaster, broadcasterName);
+
+ // Add the listener
+ MyNotificationListener listener = new MyNotificationListener();
+ server.addNotificationListener(broadcasterName, listener, null, null);
+
+ // Test we get a notification
+ broadcaster.doSomething();
+ assertEquals(1, listener.result);
+
+ // Remove the broadcaster
+ server.unregisterMBean(broadcasterName);
+
+ // This notification shouldn't work
+ broadcaster.doSomething();
try
{
- assertTrue(listener.notificationCount == 1);
+ assertEquals(1, listener.result);
}
catch (AssertionFailedError e)
{
- // FAILS IN RI: if a notification filter with REGISTRATION_NOTIFICATION
- // type enabled is used with RI (via
NotificationFilterSupport.enableType())
- // then the registration notification is never received. Using a null
filter
- // will however deliver the message. Seems like a bug in the RI
notification
- // handling
- fail("FAILS IN RI: when notification filter is used with listener for
registration notification, the event is never received.");
+ fail("FAILS IN RI: Removing a notification broadcaster does not " +
+ "remove the listeners registered against the object name.");
}
}
-}
+
+ /**
+ * Tests adding the listener to different broadcasters
+ */
+ public synchronized void testAddListenerToTwoBroadcasters()
+ throws Exception
+ {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ class MyNotificationListener implements NotificationListener
+ {
+ long result = 0;
+ public MyNotificationListener()
+ {
+ }
+ public void handleNotification(Notification notification, Object handback)
+ {
+ result++;
+ }
+ }
+ // Register the broadcaster
+ ObjectName broadcasterName = new ObjectName("test:type=broadcaster");
+ Broadcaster broadcaster = new Broadcaster();
+ server.registerMBean(broadcaster, broadcasterName);
+
+ // Add the listener to the broadcaster
+ MyNotificationListener listener = new MyNotificationListener();
+ server.addNotificationListener(broadcasterName, listener, null, null);
+
+ // Add the listener to the delegate
+ server.addNotificationListener(
+ new ObjectName("JMImplementation:type=MBeanServerDelegate"),
+ listener, null, null
+ );
+ // Test we get a notification from the broadcaster
+ broadcaster.doSomething();
+ assertEquals(1, listener.result);
+
+ // Test we get a notification from the delegate
+ server.registerMBean(new Test(), new ObjectName("Test:foo=bar"));
+ assertEquals(2, listener.result);
+
+ // Remove the broadcaster
+ server.unregisterMBean(broadcasterName);
+ assertEquals(3, listener.result);
+
+ // Make sure we are still listening to the delegate
+ server.unregisterMBean(new ObjectName("Test:foo=bar"));
+ assertEquals(4, listener.result);
+ }
+
+ /**
+ * Tests adding the listener to different broadcasters but remove one
+ */
+ public synchronized void testAddListenerToTwoBroadcastersRemoveOne()
+ throws Exception
+ {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ class MyNotificationListener implements NotificationListener
+ {
+ long result = 0;
+ public MyNotificationListener()
+ {
+ }
+ public void handleNotification(Notification notification, Object handback)
+ {
+ result++;
+ }
+ }
+
+ // Register the broadcaster
+ ObjectName broadcasterName = new ObjectName("test:type=broadcaster");
+ Broadcaster broadcaster = new Broadcaster();
+ server.registerMBean(broadcaster, broadcasterName);
+
+ // Add the listener to the broadcaster
+ MyNotificationListener listener = new MyNotificationListener();
+ server.addNotificationListener(broadcasterName, listener, null, null);
+
+ // Add the listener to the delegate
+ server.addNotificationListener(
+ new ObjectName("JMImplementation:type=MBeanServerDelegate"),
+ listener, null, null
+ );
+
+ // Remove ourselves from the broadcaster
+ server.removeNotificationListener(broadcasterName, listener);
+
+ // Test we get a notification from the broadcaster
+ broadcaster.doSomething();
+ assertEquals(0, listener.result);
+
+ // Test we get a notification from the delegate
+ server.registerMBean(new Test(), new ObjectName("Test:foo=bar"));
+ assertEquals(1, listener.result);
+ }
+
+ // MBeanServer NotificationListener Object Name -----------------
+
+ /**
+ * Tests basic listener registration to server delegate
+ */
+ public synchronized void testaddMBeanToDelegate() throws Exception
+ {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ MBeanListener listener = new MBeanListener();
+ ObjectName listenerName = new ObjectName("test:type=listener");
+ server.registerMBean(listener, listenerName);
+
+ NotificationFilterSupport filter = new NotificationFilterSupport();
+ filter.enableType(MBeanServerNotification.REGISTRATION_NOTIFICATION);
+
+ ObjectName delegateName =
+ new ObjectName("JMImplementation:type=MBeanServerDelegate");
+ server.addNotificationListener(delegateName, listenerName, filter,
"MyHandback");
+
+ // force notification
+ server.registerMBean(new Test(), new ObjectName(":foo=bar"));
+
+ assertTrue(listener.count == 1);
+ assertTrue(listener.source.equals(delegateName));
+ assertTrue(listener.handback.equals("MyHandback"));
+ }
+
+ /**
+ * Tests multiple listeners with different handbacks
+ */
+ public synchronized void testAddMBeanMultipleListeners()
+ throws Exception
+ {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ MBeanListener listener1 = new MBeanListener();
+ ObjectName listenerName1 = new ObjectName("test:type=listener1");
+ server.registerMBean(listener1, listenerName1);
+ MBeanListener listener2 = new MBeanListener();
+ ObjectName listenerName2 = new ObjectName("test:type=listener2");
+ server.registerMBean(listener2, listenerName2);
+
+ ObjectName delegateName =
+ new ObjectName("JMImplementation:type=MBeanServerDelegate");
+ server.addNotificationListener(delegateName, listenerName1, null,
"handback1");
+ server.addNotificationListener(delegateName, listenerName2, null,
"handback2");
+
+ // force notification
+ server.registerMBean(new Test(), new ObjectName(":foo=bar"));
+
+ assertEquals(1, listener1.count);
+ assertEquals(listener1.source,delegateName);
+ assertEquals(listener1.handback,"handback1");
+ assertEquals(1, listener2.count);
+ assertEquals(listener2.source,delegateName);
+ assertEquals(listener2.handback,"handback2");
+ }
+
+ /**
+ * Tests one listener multiple handbacks
+ */
+ public synchronized void testAddMBeanListenerMultipleHandbacks()
+ throws Exception
+ {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ MBeanListener listener = new MBeanListener("handback1", "handback2");
+ ObjectName listenerName = new ObjectName("test:type=listener");
+ server.registerMBean(listener, listenerName);
+
+ ObjectName delegateName =
+ new ObjectName("JMImplementation:type=MBeanServerDelegate");
+ server.addNotificationListener(delegateName, listenerName, null, "handback1");
+ server.addNotificationListener(delegateName, listenerName, null, "handback2");
+
+ // force notification
+ server.registerMBean(new Test(), new ObjectName(":foo=bar"));
+
+ assertTrue(listener.count1 == 1);
+ assertEquals(listener.source1,delegateName);
+ assertEquals(listener.handback1,"handback1");
+ assertTrue(listener.count2 == 1);
+ assertEquals(listener.source2,delegateName);
+ assertEquals(listener.handback2,"handback2");
+ }
+
+ /**
+ * Tests removing a notification listener including multiple handbacks
+ */
+ public synchronized void testMBeanRemoveListener()
+ throws Exception
+ {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ MBeanListener listener1 = new MBeanListener();
+ ObjectName listenerName1 = new ObjectName("test:type=listener1");
+ server.registerMBean(listener1, listenerName1);
+ MBeanListener listener2 = new MBeanListener();
+ ObjectName listenerName2 = new ObjectName("test:type=listener2");
+ server.registerMBean(listener2, listenerName2);
+
+ ObjectName delegateName =
+ new ObjectName("JMImplementation:type=MBeanServerDelegate");
+ server.addNotificationListener(delegateName, listenerName1, null,
"handback1");
+ server.addNotificationListener(delegateName, listenerName2, null,
"handback2");
+ server.addNotificationListener(delegateName, listenerName2, null,
"handback3");
+ server.removeNotificationListener(delegateName, listenerName2);
+
+ // force notification
+ server.registerMBean(new Test(), new ObjectName(":foo=bar"));
+ assertTrue(listener1.count == 1);
+ assertEquals(listener1.source,delegateName);
+ assertEquals(listener1.handback,"handback1");
+ assertTrue(listener2.count == 0);
+ assertTrue(listener2.count1 == 0);
+ assertTrue(listener2.count2 == 0);
+ }
+
+ /**
+ * Tests removing a broadcaster
+ */
+ public synchronized void testMBeanRemoveBroadcaster()
+ throws Exception
+ {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ MBeanListener listener1 = new MBeanListener();
+ ObjectName listenerName1 = new ObjectName("test:type=listener1");
+ server.registerMBean(listener1, listenerName1);
+
+ // Register the broadcaster
+ ObjectName broadcasterName = new ObjectName("test:type=broadcaster");
+ Broadcaster broadcaster = new Broadcaster();
+ server.registerMBean(broadcaster, broadcasterName);
+
+ // Add the listener
+ server.addNotificationListener(broadcasterName, listenerName1, null, null);
+
+ // Test we get a notification
+ broadcaster.doSomething();
+ assertEquals(1, listener1.count);
+ assertEquals(broadcasterName, listener1.source);
+
+ // Remove the broadcaster
+ server.unregisterMBean(broadcasterName);
+
+ // This notification shouldn't work
+ broadcaster.doSomething();
+ try
+ {
+ assertEquals(1, listener1.count);
+ }
+ catch (AssertionFailedError e)
+ {
+ fail("FAILS IN RI: Removing a notification broadcaster does not " +
+ "remove the listeners registered against the object name.");
+ }
+ }
+
+ /**
+ * Tests adding the listener to different broadcasters
+ */
+ public synchronized void testAddMBeanListenerToTwoBroadcasters()
+ throws Exception
+ {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ MBeanListener listener1 = new MBeanListener();
+ ObjectName listenerName1 = new ObjectName("test:type=listener1");
+ server.registerMBean(listener1, listenerName1);
+
+ // Register the broadcaster
+ ObjectName broadcasterName = new ObjectName("test:type=broadcaster");
+ Broadcaster broadcaster = new Broadcaster();
+ server.registerMBean(broadcaster, broadcasterName);
+
+ // Add the listener to the broadcaster
+ server.addNotificationListener(broadcasterName, listenerName1, null, null);
+
+ // Add the listener to the delegate
+ ObjectName delegateName =
+ new ObjectName("JMImplementation:type=MBeanServerDelegate");
+ server.addNotificationListener(delegateName,listenerName1, null, null);
+
+ // Test we get a notification from the broadcaster
+ broadcaster.doSomething();
+ assertEquals(1, listener1.count);
+ assertEquals(broadcasterName, listener1.source);
+
+ try
+ {
+ // Test we get a notification from the delegate
+ server.registerMBean(new Test(), new ObjectName("Test:foo=bar"));
+ assertEquals(2, listener1.count);
+ assertEquals(delegateName, listener1.source);
+
+ // Remove the broadcaster
+ server.unregisterMBean(broadcasterName);
+ assertEquals(3, listener1.count);
+ assertEquals(delegateName, listener1.source);
+
+ // Make sure we are still listening to the delegate
+ server.unregisterMBean(new ObjectName("Test:foo=bar"));
+ assertEquals(4, listener1.count);
+ assertEquals(delegateName, listener1.source);
+ }
+ catch (AssertionFailedError e)
+ {
+ fail("FAILS IN RI: Listener registered with ObjectName in MBeanServer " +
+ "reports the wrong source for multiple broadcaster.");
+ }
+ }
+
+ /**
+ * Tests adding the listener to different broadcasters but remove one
+ */
+ public synchronized void testAddMBeanListenerToTwoBroadcastersRemoveOne()
+ throws Exception
+ {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ MBeanListener listener1 = new MBeanListener();
+ ObjectName listenerName1 = new ObjectName("test:type=listener1");
+ server.registerMBean(listener1, listenerName1);
+
+ // Register the broadcaster
+ ObjectName broadcasterName = new ObjectName("test:type=broadcaster");
+ Broadcaster broadcaster = new Broadcaster();
+ server.registerMBean(broadcaster, broadcasterName);
+
+ // Add the listener to the broadcaster
+ server.addNotificationListener(broadcasterName, listenerName1, null, null);
+
+ // Add the listener to the delegate
+ ObjectName delegateName =
+ new ObjectName("JMImplementation:type=MBeanServerDelegate");
+ server.addNotificationListener(delegateName,listenerName1, null, null);
+
+ // Remove ourselves from the broadcaster
+ server.removeNotificationListener(broadcasterName, listener1);
+
+ // Test we get a notification from the broadcaster
+ broadcaster.doSomething();
+ assertEquals(0, listener1.count);
+
+ // Test we get a notification from the delegate
+ server.registerMBean(new Test(), new ObjectName("Test:foo=bar"));
+ assertEquals(1, listener1.count);
+ try
+ {
+ assertEquals(delegateName, listener1.source);
+ }
+ catch (AssertionFailedError e)
+ {
+ fail("FAILS IN RI: Listener registered with ObjectName in MBeanServer " +
+ "reports the wrong source for multiple broadcaster, " +
+ "even when the broadcaster it reports has been removed.");
+ }
+ }
+}
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development