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

Reply via email to