Package javax.management.remote

Examples of javax.management.remote.NotificationResult


      }
        });
      }

      while (!shouldStop()) {
    NotificationResult nr = fetchNotifs();

    if (nr == null) break; // nr == null means got exception

    final TargetedNotification[] notifs =
        nr.getTargetedNotifications();
    final int len = notifs.length;
    final HashMap listeners;
    final Integer myListenerID;

    long missed = 0;

    synchronized(ClientNotifForwarder.this) {
        // check sequence number.
        //
        if (clientSequenceNumber >= 0) {
      missed = nr.getEarliestSequenceNumber() -
          clientSequenceNumber;   
        }

        clientSequenceNumber = nr.getNextSequenceNumber();

        final int size = infoList.size();
        listeners  = new HashMap(((size>len)?len:size));

        for (int i = 0 ; i < len ; i++) {
View Full Code Here


  }

  private NotificationResult fetchNotifs() {
      try {
    NotificationResult nr = ClientNotifForwarder.this.
        fetchNotifs(clientSequenceNumber,maxNotifications,
        timeout);

    if (logger.traceOn()) {
        logger.trace("NotifFetcher-run",
View Full Code Here

      long startSequenceNumber = clientSequenceNumber;

      int notFoundCount = 0;

      NotificationResult result = null;

      while (result == null && !shouldStop()) {
    NotificationResult nr;

    try {
        // 0 notifs to update startSequenceNumber
        nr = cnf.fetchNotifs(startSequenceNumber, 0, 0L);
    } catch (ClassNotFoundException e) {
        logger.warning("NotifFetcher.fetchOneNotif",
           "Impossible exception: " + e);
        logger.debug("NotifFetcher.fetchOneNotif",e);
        return null;
    } catch (IOException e) {
        if (!shouldStop())
      logger.trace("NotifFetcher.fetchOneNotif", e);
        return null;
    }

    if (shouldStop())
        return null;

    startSequenceNumber = nr.getNextSequenceNumber();

    try {
        // 1 notif to skip possible missing class
        result = cnf.fetchNotifs(startSequenceNumber, 1, 0L);
    } catch (Exception e) {
View Full Code Here

                         "startSequenceNumber is " + startSequenceNumber +
                         ", the timeout is " + timeout +
                         ", the maxNotifications is " + maxNotifications);
        }

        NotificationResult nr = null;
  final long t = Math.min(connectionTimeout, timeout);
        try {
            nr = notifBuffer.fetchNotifications(listenerList,
                                                startSequenceNumber,
                                                t, maxNotifications);
        } catch (InterruptedException ire) {
            nr = new NotificationResult(0L, 0L, new TargetedNotification[0]);
        }

        if (logger.traceOn()) {
            logger.trace("fetchNotifs", "Forwarding the notifs: "+nr);
        }
View Full Code Here

     how to serialize a single TN (for example, it's an XML
     serializer that can serialize an NR containing a TN but not
     a TN on its own).  */
  for (int i = 0; i < tns.length; i++) {
      TargetedNotification tn = tns[i];
      NotificationResult trialnr =
    new NotificationResult(0, 0, new TargetedNotification[] {tn});
      try {
    serialization.wrap(trialnr);
    tnList.add(tn);
      } catch (IOException e) {
    logger.warning("purgeUnserializable",
             "cannot serialize notif: " + tn);
    logger.fine("purgeUnserializable", e);
    final Integer listenerID = tn.getListenerID();
    final Notification badNotif = tn.getNotification();
    final String notifType = JMXConnectionNotification.NOTIFS_LOST;
    final String notifMessage = "Not serializable: " + badNotif;
    Notification goodNotif =
        new JMXConnectionNotification(notifType,
              badNotif.getSource(),
              clientId,
              badNotif.getSequenceNumber(),
              notifMessage,
              ONE_LONG);
    /* Our implementation has the convention that a NOTIFS_LOST
       has a userData that says how many notifs were lost.  */
    tn = new TargetedNotification(goodNotif, listenerID);
    trialnr =
        new NotificationResult(0, 0,
             new TargetedNotification[] {tn});
    try {
        serialization.wrap(trialnr);
        tnList.add(tn);
    } catch (IOException e1) {
        // OK.
        // too bad, at least we have logged it
    }
      }
  }

  tns = (TargetedNotification[])
      tnList.toArray(new TargetedNotification[0]);

  return new NotificationResult(nr.getEarliestSequenceNumber(),
              nr.getNextSequenceNumber(),
              tns);
    }
View Full Code Here

     how to serialize a single TN (for example, it's an XML
     serializer that can serialize an NR containing a TN but not
     a TN on its own).  */
  for (int i = 0; i < tns.length; i++) {
      TargetedNotification tn = tns[i];
      NotificationResult trialnr =
    new NotificationResult(0, 0, new TargetedNotification[] {tn});
      try {
    serialization.wrap(trialnr);
    tnList.add(tn);
      } catch (IOException e) {
    logger.warning("purgeUnserializable",
             "cannot serialize notif: " + tn);
    logger.fine("purgeUnserializable", e);
    final Integer listenerID = tn.getListenerID();
    final Notification badNotif = tn.getNotification();
    final String notifType = JMXConnectionNotification.NOTIFS_LOST;
    final String notifMessage = "Not serializable: " + badNotif;
    Notification goodNotif =
        new JMXConnectionNotification(notifType,
              badNotif.getSource(),
              clientId,
              badNotif.getSequenceNumber(),
              notifMessage,
              ONE_LONG);
    /* Our implementation has the convention that a NOTIFS_LOST
       has a userData that says how many notifs were lost.  */
    tn = new TargetedNotification(goodNotif, listenerID);
    trialnr =
        new NotificationResult(0, 0,
             new TargetedNotification[] {tn});
    try {
        serialization.wrap(trialnr);
        tnList.add(tn);
    } catch (IOException e1) {
        // OK.
        // too bad, at least we have logged it
    }
      }
  }

  tns = (TargetedNotification[])
      tnList.toArray(new TargetedNotification[0]);

  return new NotificationResult(nr.getEarliestSequenceNumber(),
              nr.getNextSequenceNumber(),
              tns);
    }
View Full Code Here

      }

      long start = nr.getClientSequenceNumber();
      long timeout = nr.getTimeout();
      int max = nr.getMaxNotifications();
      NotificationResult result =
    getServerNotifFwd().fetchNotifs(start, timeout, max);
      Object wrapped;
      try {
    wrapped = serialization.wrap(result);
      } catch (NotSerializableException e) {
View Full Code Here

      }

      long start = nr.getClientSequenceNumber();
      long timeout = nr.getTimeout();
      int max = nr.getMaxNotifications();
      NotificationResult result =
    getServerNotifFwd().fetchNotifs(start, timeout, max);
      Object wrapped;
      try {
    wrapped = serialization.wrap(result);
      } catch (NotSerializableException e) {
View Full Code Here

                makeFilter(allListenerId, wildcardName, null);
        NotificationFilterSupport regFilter = new NotificationFilterSupport();
        regFilter.enableType(notifType);

        // Get initial sequence number
        NotificationResult nr =
            nb.fetchNotifications(allListenerFilter, 0, 0L, 0);
        int nnotifs = nr.getTargetedNotifications().length;
        if (nnotifs > 0) {
            System.out.println("Expected 0 notifs for initial fetch, " +
                               "got " + nnotifs);
            return false;
        }
        System.out.println("Got 0 notifs for initial fetch, OK");

        long earliest = nr.getEarliestSequenceNumber();
        long next = nr.getNextSequenceNumber();
        if (earliest != next) {
            System.out.println("Expected earliest==next in initial fetch, " +
                               "earliest=" + earliest + "; next=" + next);
            return false;
        }
        System.out.println("Got earliest==next in initial fetch, OK");

        mbs.createMBean(MLet.class.getName(), null);
        mbs.createMBean(NotificationSender.class.getName(), senderName);

        NotificationSenderMBean sender = (NotificationSenderMBean)
            MBeanServerInvocationHandler.newProxyInstance(mbs,
                                                          senderName,
                                                          NotificationSenderMBean.class,
                                                          false);

        /* We test here that MBeans already present when the
           NotificationBuffer was created get a listener for the
           buffer, as do MBeans created later.  The
           MBeanServerDelegate was already present, while the
           NotificationSender was created later.  */

        // Check that the NotificationSender does indeed have a listener
        /* Note we are dependent on the specifics of our JMX
           implementation here.  There is no guarantee that the MBean
           creation listeners will have run to completion when
           creation of the MBean returns.  */
        int nlisteners = sender.getListenerCount();
        if (nlisteners != 1) {
            System.out.println("Notification sender should have 1 listener, " +
                               "has " + nlisteners);
            return false;
        }
        System.out.println("Notification sender has 1 listener, OK");

        // Now we should see two creation notifications
        nr = nb.fetchNotifications(allListenerFilter, next, 0L,
                                   Integer.MAX_VALUE);
        TargetedNotification[] tns = nr.getTargetedNotifications();
        if (tns.length != 2) {
            System.out.println("Expected 2 notifs, got: " +
                               Arrays.asList(tns));
            return false;
        }
        if (!(tns[0].getNotification() instanceof MBeanServerNotification)
            || !(tns[1].getNotification() instanceof MBeanServerNotification))
            {
            System.out.println("Expected 2 MBeanServerNotifications, got: " +
                               Arrays.asList(tns));
            return false;
        }
        if (!tns[0].getListenerID().equals(tns[1].getListenerID())
            || !tns[0].getListenerID().equals(allListenerId)) {
            System.out.println("Bad listener IDs: " + Arrays.asList(tns));
            return false;
        }
        System.out.println("Got 2 different MBeanServerNotifications, OK");

        // If we ask for max 1 notifs, we should only get one
        nr = nb.fetchNotifications(allListenerFilter, next, 0L, 1);
        tns = nr.getTargetedNotifications();
        if (tns.length != 1) {
            System.out.println("Expected 1 notif, got: " + Arrays.asList(tns));
            return false;
        }
        TargetedNotification tn1 = tns[0];
        System.out.println("Got 1 notif when asked for 1, OK");

        // Now we should get the other one
        nr = nb.fetchNotifications(allListenerFilter, nr.getNextSequenceNumber(),
                                   0L, 1);
        tns = nr.getTargetedNotifications();
        if (tns.length != 1) {
            System.out.println("Expected 1 notif, got: " + Arrays.asList(tns));
            return false;
        }
        TargetedNotification tn2 = tns[0];
        System.out.println("Got 1 notif when asked for 1 again, OK");

        if (tn1.getNotification() == tn2.getNotification()) {
            System.out.println("Returned same notif twice: " + tn1);
            return false;
        }
        System.out.println("2 creation notifs are different, OK");

        // Now we should get none (timeout is 0)
        long oldNext = nr.getNextSequenceNumber();
        nr = nb.fetchNotifications(allListenerFilter, oldNext, 0L,
                                   Integer.MAX_VALUE);
        tns = nr.getTargetedNotifications();
        if (tns.length != 0) {
            System.out.println("Expected 0 notifs, got: " +
                               Arrays.asList(tns));
            return false;
        }
        System.out.println("Got 0 notifs with 0 timeout, OK");
        if (nr.getNextSequenceNumber() != oldNext) {
            System.out.println("Sequence number changed: " + oldNext + " -> " +
                               nr.getNextSequenceNumber());
            return false;
        }
        System.out.println("Next seqno unchanged with 0 timeout, OK");

        // Check that timeouts work
        long startTime = System.currentTimeMillis();
        nr = nb.fetchNotifications(allListenerFilter, oldNext, 250L,
                                   Integer.MAX_VALUE);
        tns = nr.getTargetedNotifications();
        if (tns.length != 0) {
            System.out.println("Expected 0 notifs, got: " +
                               Arrays.asList(tns));
            return false;
        }
        long endTime = System.currentTimeMillis();
        long elapsed = endTime - startTime;
        if (elapsed < 250L) {
            System.out.println("Elapsed time shorter than timeout: " +
                               elapsed);
            return false;
        }
        System.out.println("Timeout worked, OK");

        // Check that notification filtering works
        NotificationFilter senderFilter = new NotificationFilter() {
            public boolean isNotificationEnabled(Notification n) {
                if (!(n instanceof MBeanServerNotification))
                    return false;
                MBeanServerNotification mbsn = (MBeanServerNotification) n;
                return (mbsn.getMBeanName().equals(senderName));
            }
        };
        Integer senderListenerId = new Integer(88);
        NotificationBufferFilter senderListenerFilter =
                makeFilter(senderListenerId, wildcardName, senderFilter);
        nr = nb.fetchNotifications(senderListenerFilter, 0, 1000L,
                                   Integer.MAX_VALUE);
        tns = nr.getTargetedNotifications();
        if (tns.length != 1) {
            System.out.println("Expected 1 notif, got: " + Arrays.asList(tns));
            return false;
        }
        MBeanServerNotification mbsn =
            (MBeanServerNotification) tns[0].getNotification();
        if (!mbsn.getMBeanName().equals(senderName)) {
            System.out.println("Expected notif with senderName, got: " +
                               mbsn + " (" + mbsn.getMBeanName() + ")");
            return false;
        }
        System.out.println("Successfully applied NotificationFilter, OK");

        // Now send 8 notifs to fill up our 10-element buffer
        sender.sendNotifs("tiddly.pom", 8);
        nr = nb.fetchNotifications(allListenerFilter, 0, 1000L,
                                   Integer.MAX_VALUE);
        tns = nr.getTargetedNotifications();
        if (tns.length != 10) {
            System.out.println("Expected 10 notifs, got: " +
                               Arrays.asList(tns));
            return false;
        }
        System.out.println("Got full buffer of 10 notifications, OK");

        // Check that the 10 notifs are the ones we expected
        for (int i = 0; i < 10; i++) {
            String expected =
                (i < 2) ? notifType : "tiddly.pom";
            String found = tns[i].getNotification().getType();
            if (!found.equals(expected)) {
                System.out.println("Notif " + i + " bad type: expected <" +
                                   expected + ">, found <" + found + ">");
                return false;
            }
        }
        System.out.println("Notifs have right types, OK");

        // Check that ObjectName filtering works
        NotificationBufferFilter senderNameFilter =
                makeFilter(new Integer(66), senderName, null);
        nr = nb.fetchNotifications(senderNameFilter, 0, 0L,
                                   Integer.MAX_VALUE);
        tns = nr.getTargetedNotifications();
        if (tns.length != 8) {
            System.out.println("Bad result from ObjectName filtering: " +
                               Arrays.asList(tns));
            return false;
        }
        System.out.println("ObjectName filtering works, OK");

        // Send one more notif, which should cause the oldest one to drop
        sender.sendNotifs("foo.bar", 1);
        nr = nb.fetchNotifications(allListenerFilter, 0, 1000L,
                                   Integer.MAX_VALUE);
        if (nr.getEarliestSequenceNumber() <= earliest) {
            System.out.println("Expected earliest to increase: " +
                               nr.getEarliestSequenceNumber() + " should be > "
                               + earliest);
            return false;
        }
        System.out.println("Earliest notif dropped, OK");

        // Check that the 10 notifs are the ones we expected
        tns = nr.getTargetedNotifications();
        for (int i = 0; i < 10; i++) {
            String expected =
                (i < 1) ? notifType
                        : (i < 9) ? "tiddly.pom" : "foo.bar";
            String found = tns[i].getNotification().getType();
            if (!found.equals(expected)) {
                System.out.println("Notif " + i + " bad type: expected <" +
                                   expected + ">, found <" + found + ">");
                return false;
            }
        }
        System.out.println("Notifs have right types, OK");

        // Apply a filter that only selects the first notif, with max notifs 1,
        // then check that it skipped past the others even though it already
        // had its 1 notif
        NotificationBufferFilter firstFilter =
                makeFilter(new Integer(55), wildcardName, regFilter);
        nr = nb.fetchNotifications(firstFilter, 0, 1000L, 1);
        tns = nr.getTargetedNotifications();
        if (tns.length != 1
            || !tns[0].getNotification().getType().equals(notifType)) {
            System.out.println("Unexpected return from filtered call: " +
                               Arrays.asList(tns));
            return false;
        }
        nr = nb.fetchNotifications(allListenerFilter, nr.getNextSequenceNumber(),
                                   0L, 1000);
        tns = nr.getTargetedNotifications();
        if (tns.length != 0) {
            System.out.println("Expected 0 notifs, got: " +
                               Arrays.asList(tns));
            return false;
        }

        // Create a second, larger buffer, which should share the same notifs
        nr = nb.fetchNotifications(allListenerFilter, 0,
                                   1000L, Integer.MAX_VALUE);
        queuesize = new Integer(20);
        env.put(com.sun.jmx.remote.util.EnvHelp.BUFFER_SIZE_PROPERTY, queuesize);
        NotificationBuffer nb2 =
            ArrayNotificationBuffer.getNotificationBuffer(mbs, env);
        NotificationResult nr2 =
            nb2.fetchNotifications(allListenerFilter, 0,
                                   1000L, Integer.MAX_VALUE);
        if (nr.getEarliestSequenceNumber() != nr2.getEarliestSequenceNumber()
            || nr.getNextSequenceNumber() != nr2.getNextSequenceNumber()
            || !sameTargetedNotifs(nr.getTargetedNotifications(),
                                   nr2.getTargetedNotifications()))
            return false;
        System.out.println("Adding second buffer preserved notif list, OK");

        // Check that the capacity is now 20
        sender.sendNotifs("propter.hoc", 10);
        nr2 = nb2.fetchNotifications(allListenerFilter, 0,
                                     1000L, Integer.MAX_VALUE);
        if (nr.getEarliestSequenceNumber() !=
            nr2.getEarliestSequenceNumber()) {
            System.out.println("Earliest seq number changed after notifs " +
                               "that should have fit");
            return false;
        }
        TargetedNotification[] tns2 = new TargetedNotification[10];
        Arrays.asList(nr2.getTargetedNotifications()).subList(0, 10).toArray(tns2);
        if (!sameTargetedNotifs(nr.getTargetedNotifications(), tns2)) {
            System.out.println("Early notifs changed after notifs " +
                               "that should have fit");
            return false;
        }
        System.out.println("New notifications fit in now-larger buffer, OK");

        // Drop the second buffer and check that the capacity shrinks
        nb2.dispose();
        NotificationResult nr3 =
            nb.fetchNotifications(allListenerFilter, 0,
                                  1000L, Integer.MAX_VALUE);
        if (nr3.getEarliestSequenceNumber() != nr.getNextSequenceNumber()) {
            System.out.println("After shrink, notifs not dropped as expected");
            return false;
        }
        if (nr3.getNextSequenceNumber() != nr2.getNextSequenceNumber()) {
            System.out.println("After shrink, next seq no does not match");
            return false;
        }
        tns2 = new TargetedNotification[10];
        Arrays.asList(nr2.getTargetedNotifications()).subList(10, 20).toArray(tns2);
        if (!sameTargetedNotifs(nr3.getTargetedNotifications(), tns2)) {
            System.out.println("Later notifs not preserved after shrink");
            return false;
        }
        System.out.println("Dropping second buffer shrank capacity, OK");

View Full Code Here

        try {
            if (serverTerminated) {
                // we must not call fetchNotifs() if the server is
                // terminated (timeout elapsed).
                //
                return new NotificationResult(0L, 0L,
                                              new TargetedNotification[0]);

            }
            final long csn = clientSequenceNumber;
            final int mn = maxNotifications;
View Full Code Here

TOP

Related Classes of javax.management.remote.NotificationResult

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.