Search in sources :

Example 1 with NotificationResult

use of javax.management.remote.NotificationResult in project jdk8u_jdk by JetBrains.

the class NotificationBufferTest method test.

private static boolean test() throws Exception {
    MBeanServer mbs = MBeanServerFactory.createMBeanServer();
    Integer queuesize = new Integer(10);
    HashMap env = new HashMap();
    env.put(com.sun.jmx.remote.util.EnvHelp.BUFFER_SIZE_PROPERTY, queuesize);
    final NotificationBuffer nb = ArrayNotificationBuffer.getNotificationBuffer(mbs, env);
    final ObjectName senderName = new ObjectName("dom:type=sender");
    final ObjectName wildcardName = new ObjectName("*:*");
    final String notifType = MBeanServerNotification.REGISTRATION_NOTIFICATION;
    Integer allListenerId = new Integer(99);
    NotificationBufferFilter allListenerFilter = 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");
    // Final test: check that destroying the final shared buffer
    // removes its listeners
    nb.dispose();
    nlisteners = sender.getListenerCount();
    if (nlisteners != 0) {
        System.out.println("Disposing buffer should leave 0 listeners, " + "but notification sender has " + nlisteners);
        return false;
    }
    System.out.println("Dropping first buffer drops listeners, OK");
    return true;
}
Also used : HashMap(java.util.HashMap) MBeanServerNotification(javax.management.MBeanServerNotification) MLet(javax.management.loading.MLet) NotificationBufferFilter(com.sun.jmx.remote.internal.NotificationBufferFilter) NotificationResult(javax.management.remote.NotificationResult) TargetedNotification(javax.management.remote.TargetedNotification) Notification(javax.management.Notification) MBeanServerNotification(javax.management.MBeanServerNotification) ObjectName(javax.management.ObjectName) NotificationFilterSupport(javax.management.NotificationFilterSupport) NotificationBuffer(com.sun.jmx.remote.internal.NotificationBuffer) ArrayNotificationBuffer(com.sun.jmx.remote.internal.ArrayNotificationBuffer) TargetedNotification(javax.management.remote.TargetedNotification) NotificationFilter(javax.management.NotificationFilter) MBeanServer(javax.management.MBeanServer)

Example 2 with NotificationResult

use of javax.management.remote.NotificationResult in project jdk8u_jdk by JetBrains.

the class ClientNotifForwarder method init.

/*
     * Called to decide whether need to start a thread for fetching notifs.
     * <P>The parameter reconnected will decide whether to initilize the clientSequenceNumber,
     * initilaizing the clientSequenceNumber means to ignore all notifications arrived before.
     * If it is reconnected, we will not initialize in order to get all notifications arrived
     * during the reconnection. It may cause the newly registered listeners to receive some
     * notifications arrived before its registray.
     */
private synchronized void init(boolean reconnected) throws IOException {
    switch(state) {
        case STARTED:
            return;
        case STARTING:
            return;
        case TERMINATED:
            throw new IOException("The ClientNotifForwarder has been terminated.");
        case STOPPING:
            if (beingReconnected == true) {
                // wait for another thread to do, which is doing reconnection
                return;
            }
            while (state == STOPPING) {
                // make sure only one fetching thread.
                try {
                    wait();
                } catch (InterruptedException ire) {
                    IOException ioe = new IOException(ire.toString());
                    EnvHelp.initCause(ioe, ire);
                    throw ioe;
                }
            }
            // re-call this method to check the state again,
            // the state can be other value like TERMINATED.
            init(reconnected);
            return;
        case STOPPED:
            if (beingReconnected == true) {
                // wait for another thread to do, which is doing reconnection
                return;
            }
            if (logger.traceOn()) {
                logger.trace("init", "Initializing...");
            }
            // init the clientSequenceNumber if not reconnected.
            if (!reconnected) {
                try {
                    NotificationResult nr = fetchNotifs(-1, 0, 0);
                    if (state != STOPPED) {
                        // thread takes over the fetching job
                        return;
                    }
                    clientSequenceNumber = nr.getNextSequenceNumber();
                } catch (ClassNotFoundException e) {
                    // can't happen
                    logger.warning("init", "Impossible exception: " + e);
                    logger.debug("init", e);
                }
            }
            // for cleaning
            try {
                mbeanRemovedNotifID = addListenerForMBeanRemovedNotif();
            } catch (Exception e) {
                final String msg = "Failed to register a listener to the mbean " + "server: the client will not do clean when an MBean " + "is unregistered";
                if (logger.traceOn()) {
                    logger.trace("init", msg, e);
                }
            }
            setState(STARTING);
            // start fetching
            executor.execute(new NotifFetcher());
            return;
        default:
            // should not
            throw new IOException("Unknown state.");
    }
}
Also used : IOException(java.io.IOException) NotificationResult(javax.management.remote.NotificationResult) UnmarshalException(java.rmi.UnmarshalException) IOException(java.io.IOException) NotSerializableException(java.io.NotSerializableException) ListenerNotFoundException(javax.management.ListenerNotFoundException) InstanceNotFoundException(javax.management.InstanceNotFoundException)

Example 3 with NotificationResult

use of javax.management.remote.NotificationResult in project jdk8u_jdk by JetBrains.

the class ArrayNotificationBuffer method fetchNotifications.

/**
     * <p>Fetch notifications that match the given listeners.</p>
     *
     * <p>The operation only considers notifications with a sequence
     * number at least <code>startSequenceNumber</code>.  It will take
     * no longer than <code>timeout</code>, and will return no more
     * than <code>maxNotifications</code> different notifications.</p>
     *
     * <p>If there are no notifications matching the criteria, the
     * operation will block until one arrives, subject to the
     * timeout.</p>
     *
     * @param filter an object that will add notifications to a
     * {@code List<TargetedNotification>} if they match the current
     * listeners with their filters.
     * @param startSequenceNumber the first sequence number to
     * consider.
     * @param timeout the maximum time to wait.  May be 0 to indicate
     * not to wait if there are no notifications.
     * @param maxNotifications the maximum number of notifications to
     * return.  May be 0 to indicate a wait for eligible notifications
     * that will return a usable <code>nextSequenceNumber</code>.  The
     * {@link TargetedNotification} array in the returned {@link
     * NotificationResult} may contain more than this number of
     * elements but will not contain more than this number of
     * different notifications.
     */
public NotificationResult fetchNotifications(NotificationBufferFilter filter, long startSequenceNumber, long timeout, int maxNotifications) throws InterruptedException {
    logger.trace("fetchNotifications", "starts");
    if (startSequenceNumber < 0 || isDisposed()) {
        synchronized (this) {
            return new NotificationResult(earliestSequenceNumber(), nextSequenceNumber(), new TargetedNotification[0]);
        }
    }
    // Check arg validity
    if (filter == null || startSequenceNumber < 0 || timeout < 0 || maxNotifications < 0) {
        logger.trace("fetchNotifications", "Bad args");
        throw new IllegalArgumentException("Bad args to fetch");
    }
    if (logger.debugOn()) {
        logger.trace("fetchNotifications", "filter=" + filter + "; startSeq=" + startSequenceNumber + "; timeout=" + timeout + "; max=" + maxNotifications);
    }
    if (startSequenceNumber > nextSequenceNumber()) {
        final String msg = "Start sequence number too big: " + startSequenceNumber + " > " + nextSequenceNumber();
        logger.trace("fetchNotifications", msg);
        throw new IllegalArgumentException(msg);
    }
    /* Determine the end time corresponding to the timeout value.
           Caller may legitimately supply Long.MAX_VALUE to indicate no
           timeout.  In that case the addition will overflow and produce
           a negative end time.  Set end time to Long.MAX_VALUE in that
           case.  We assume System.currentTimeMillis() is positive.  */
    long endTime = System.currentTimeMillis() + timeout;
    if (// overflow
    endTime < 0)
        endTime = Long.MAX_VALUE;
    if (logger.debugOn())
        logger.debug("fetchNotifications", "endTime=" + endTime);
    /* We set earliestSeq the first time through the loop.  If we
           set it here, notifications could be dropped before we
           started examining them, so earliestSeq might not correspond
           to the earliest notification we examined.  */
    long earliestSeq = -1;
    long nextSeq = startSequenceNumber;
    List<TargetedNotification> notifs = new ArrayList<TargetedNotification>();
    /* On exit from this loop, notifs, earliestSeq, and nextSeq must
           all be correct values for the returned NotificationResult.  */
    while (true) {
        logger.debug("fetchNotifications", "main loop starts");
        NamedNotification candidate;
        /* Get the next available notification regardless of filters,
               or wait for one to arrive if there is none.  */
        synchronized (this) {
            /* First time through.  The current earliestSequenceNumber
                   is the first one we could have examined.  */
            if (earliestSeq < 0) {
                earliestSeq = earliestSequenceNumber();
                if (logger.debugOn()) {
                    logger.debug("fetchNotifications", "earliestSeq=" + earliestSeq);
                }
                if (nextSeq < earliestSeq) {
                    nextSeq = earliestSeq;
                    logger.debug("fetchNotifications", "nextSeq=earliestSeq");
                }
            } else
                earliestSeq = earliestSequenceNumber();
            /* If many notifications have been dropped since the
                   last time through, nextSeq could now be earlier
                   than the current earliest.  If so, notifications
                   may have been lost and we return now so the caller
                   can see this next time it calls.  */
            if (nextSeq < earliestSeq) {
                logger.trace("fetchNotifications", "nextSeq=" + nextSeq + " < " + "earliestSeq=" + earliestSeq + " so may have lost notifs");
                break;
            }
            if (nextSeq < nextSequenceNumber()) {
                candidate = notificationAt(nextSeq);
                // Skip security check if NotificationBufferFilter is not overloaded
                if (!(filter instanceof ServerNotifForwarder.NotifForwarderBufferFilter)) {
                    try {
                        ServerNotifForwarder.checkMBeanPermission(this.mBeanServer, candidate.getObjectName(), "addNotificationListener");
                    } catch (InstanceNotFoundException | SecurityException e) {
                        if (logger.debugOn()) {
                            logger.debug("fetchNotifications", "candidate: " + candidate + " skipped. exception " + e);
                        }
                        ++nextSeq;
                        continue;
                    }
                }
                if (logger.debugOn()) {
                    logger.debug("fetchNotifications", "candidate: " + candidate);
                    logger.debug("fetchNotifications", "nextSeq now " + nextSeq);
                }
            } else {
                /* nextSeq is the largest sequence number.  If we
                       already got notifications, return them now.
                       Otherwise wait for some to arrive, with
                       timeout.  */
                if (notifs.size() > 0) {
                    logger.debug("fetchNotifications", "no more notifs but have some so don't wait");
                    break;
                }
                long toWait = endTime - System.currentTimeMillis();
                if (toWait <= 0) {
                    logger.debug("fetchNotifications", "timeout");
                    break;
                }
                /* dispose called */
                if (isDisposed()) {
                    if (logger.debugOn())
                        logger.debug("fetchNotifications", "dispose callled, no wait");
                    return new NotificationResult(earliestSequenceNumber(), nextSequenceNumber(), new TargetedNotification[0]);
                }
                if (logger.debugOn())
                    logger.debug("fetchNotifications", "wait(" + toWait + ")");
                wait(toWait);
                continue;
            }
        }
        /* We have a candidate notification.  See if it matches
               our filters.  We do this outside the synchronized block
               so we don't hold up everyone accessing the buffer
               (including notification senders) while we evaluate
               potentially slow filters.  */
        ObjectName name = candidate.getObjectName();
        Notification notif = candidate.getNotification();
        List<TargetedNotification> matchedNotifs = new ArrayList<TargetedNotification>();
        logger.debug("fetchNotifications", "applying filter to candidate");
        filter.apply(matchedNotifs, name, notif);
        if (matchedNotifs.size() > 0) {
            /* We only check the max size now, so that our
                   returned nextSeq is as large as possible.  This
                   prevents the caller from thinking it missed
                   interesting notifications when in fact we knew they
                   weren't.  */
            if (maxNotifications <= 0) {
                logger.debug("fetchNotifications", "reached maxNotifications");
                break;
            }
            --maxNotifications;
            if (logger.debugOn())
                logger.debug("fetchNotifications", "add: " + matchedNotifs);
            notifs.addAll(matchedNotifs);
        }
        ++nextSeq;
    }
    // end while
    /* Construct and return the result.  */
    int nnotifs = notifs.size();
    TargetedNotification[] resultNotifs = new TargetedNotification[nnotifs];
    notifs.toArray(resultNotifs);
    NotificationResult nr = new NotificationResult(earliestSeq, nextSeq, resultNotifs);
    if (logger.debugOn())
        logger.debug("fetchNotifications", nr.toString());
    logger.trace("fetchNotifications", "ends");
    return nr;
}
Also used : InstanceNotFoundException(javax.management.InstanceNotFoundException) ArrayList(java.util.ArrayList) NotificationResult(javax.management.remote.NotificationResult) TargetedNotification(javax.management.remote.TargetedNotification) Notification(javax.management.Notification) MBeanServerNotification(javax.management.MBeanServerNotification) ObjectName(javax.management.ObjectName) TargetedNotification(javax.management.remote.TargetedNotification)

Example 4 with NotificationResult

use of javax.management.remote.NotificationResult in project jdk8u_jdk by JetBrains.

the class ServerNotifForwarder method fetchNotifs.

public NotificationResult fetchNotifs(long startSequenceNumber, long timeout, int maxNotifications) {
    if (logger.traceOn()) {
        logger.trace("fetchNotifs", "Fetching notifications, the " + "startSequenceNumber is " + startSequenceNumber + ", the timeout is " + timeout + ", the maxNotifications is " + maxNotifications);
    }
    NotificationResult nr;
    final long t = Math.min(connectionTimeout, timeout);
    try {
        nr = notifBuffer.fetchNotifications(bufferFilter, startSequenceNumber, t, maxNotifications);
        snoopOnUnregister(nr);
    } catch (InterruptedException ire) {
        nr = new NotificationResult(0L, 0L, new TargetedNotification[0]);
    }
    if (logger.traceOn()) {
        logger.trace("fetchNotifs", "Forwarding the notifs: " + nr);
    }
    return nr;
}
Also used : NotificationResult(javax.management.remote.NotificationResult)

Aggregations

NotificationResult (javax.management.remote.NotificationResult)4 InstanceNotFoundException (javax.management.InstanceNotFoundException)2 MBeanServerNotification (javax.management.MBeanServerNotification)2 Notification (javax.management.Notification)2 ObjectName (javax.management.ObjectName)2 TargetedNotification (javax.management.remote.TargetedNotification)2 ArrayNotificationBuffer (com.sun.jmx.remote.internal.ArrayNotificationBuffer)1 NotificationBuffer (com.sun.jmx.remote.internal.NotificationBuffer)1 NotificationBufferFilter (com.sun.jmx.remote.internal.NotificationBufferFilter)1 IOException (java.io.IOException)1 NotSerializableException (java.io.NotSerializableException)1 UnmarshalException (java.rmi.UnmarshalException)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 ListenerNotFoundException (javax.management.ListenerNotFoundException)1 MBeanServer (javax.management.MBeanServer)1 NotificationFilter (javax.management.NotificationFilter)1 NotificationFilterSupport (javax.management.NotificationFilterSupport)1 MLet (javax.management.loading.MLet)1