Module java.management
Package javax.management

Interface NotificationEmitter

所有超级接口:
NotificationBroadcaster
所有已知实现类:
CounterMonitor, GaugeMonitor, JMXConnectorServer, MBeanServerDelegate, Monitor, NotificationBroadcasterSupport, RelationService, RequiredModelMBean, RMIConnectorServer, StandardEmitterMBean, StringMonitor, Timer

public interface NotificationEmitter extends NotificationBroadcaster

由发出通知的MBean实现的接口。它允许将监听器注册到MBean作为通知监听器。

通知分发

当MBean发出通知时,它会考虑已使用addNotificationListener添加但尚未使用removeNotificationListener移除的每个监听器。如果使用该监听器提供了过滤器,并且如果过滤器的isNotificationEnabled方法返回false,则会忽略该监听器。否则,将使用通知调用监听器的handleNotification方法,以及提供给addNotificationListener的handback对象。

如果同一个监听器被添加多次,则将视为添加了多少次。通常,使用不同的过滤器或handback对象添加相同的监听器非常有用。

关于调用过滤器和监听器方法的线程,此接口的实现可能有所不同。

如果过滤器或监听器的方法调用引发了一个Exception,那么该异常不应阻止调用其他监听器。但是,如果方法调用引发了一个Error,则建议在那一点停止通知的处理,并且如果可能将Error传播给通知的发送者,则应该这样做。

应该优先使用此接口,而不是NotificationBroadcaster接口。

此接口的实现和NotificationBroadcaster应该注意同步。特别是,在调用监听器时不建议实现持有任何锁。为了处理在分派通知时监听器列表可能发生更改的可能性,一个好的策略是使用CopyOnWriteArrayList来管理此列表。

自 JDK 版本:
1.5
  • Method Details

    • removeNotificationListener

      void removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) throws ListenerNotFoundException

      从此 MBean 中移除监听器。MBean 必须具有与给定的listenerfilterhandback参数完全匹配的监听器。如果存在多个这样的监听器,则只会移除一个。

      如果filterhandback参数为null,则仅当要移除的监听器中它们为null时才能为null。

      参数:
      listener - 先前添加到此 MBean 的监听器。
      filter - 添加监听器时指定的过滤器。
      handback - 添加监听器时指定的handback。
      抛出:
      ListenerNotFoundException - 未向 MBean 注册监听器,或者未使用给定的过滤器和handback注册监听器。