- 所有已实现的接口:
NotificationBroadcaster,NotificationEmitter
- 已知子类:
JMXConnectorServer,Monitor,RelationService,Timer
提供 NotificationEmitter 接口的实现。这可以用作发送通知的 MBean 的超类。
默认情况下,通知分发模型是同步的。也就是说,当一个线程调用 sendNotification 时,每个监听器的 NotificationListener.handleNotification 方法都会在该线程内调用。您可以通过在子类中覆盖 handleNotification 或将 Executor 传递给构造函数来覆盖此默认值。
如果过滤器或监听器的方法调用抛出 Exception ,则该异常不会阻止调用其他监听器。但是,如果过滤器或 Executor.execute 或 handleNotification 的方法调用(当未指定 Executor 时)抛出 Error ,则该 Error 将传播到 sendNotification 的调用者。
使用 JMX 远程 API(请参阅 JMXConnector)添加的远程监听通常不会被同步调用。也就是说,当 sendNotification 返回时,不能保证任何远程监听都已经收到通知。
- 自从:
- 1.5
-
构造方法总结
构造方法构造方法描述构造一个 NotificationBroadcasterSupport,其中每个监听都由发送通知的线程调用。NotificationBroadcasterSupport(Executor executor) 构造一个 NotificationBroadcasterSupport,其中使用给定的Executor调用每个监听器。NotificationBroadcasterSupport(Executor executor, MBeanNotificationInfo... info) 构造一个 NotificationBroadcasterSupport,其中包含有关可能发送的通知的信息,以及使用给定的Executor调用每个监听器的位置。使用有关可能发送的通知的信息构造 NotificationBroadcasterSupport。 -
方法总结
修饰符和类型方法描述voidaddNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) 添加一个监听。返回一个数组,指示对于此 MBean 可能发送的每个通知,通知的 Java 类的名称和通知类型。protected voidhandleNotification(NotificationListener listener, Notification notif, Object handback) sendNotification为每个监听器调用此方法,以便将通知发送给该监听器。void从此 MBean 中移除监听。voidremoveNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) 从此 MBean 中移除监听。voidsendNotification(Notification notification) 发送通知。
-
构造方法详细信息
-
NotificationBroadcasterSupport
public NotificationBroadcasterSupport()构造一个 NotificationBroadcasterSupport,其中每个监听器都由发送通知的线程调用。此构造函数等效于NotificationBroadcasterSupport(null, null)。 -
NotificationBroadcasterSupport
构造一个 NotificationBroadcasterSupport,其中使用给定的Executor调用每个监听器。调用sendNotification时,如果添加了空值NotificationFilter或isNotificationEnabled为发送的通知返回 true,则选择一个监听器。对NotificationFilter.isNotificationEnabled的调用发生在调用sendNotification的线程中。然后,对于每个选定的监听器,使用调用handleNotification方法的命令调用executor.execute。此构造函数等效于NotificationBroadcasterSupport(executor, null)。- 参数:
executor- 方法sendNotification用于发送每个通知的执行程序。如果它为 null,调用sendNotification的线程将调用handleNotification方法本身。- 自从:
- 1.6
-
NotificationBroadcasterSupport
使用有关可能发送的通知的信息构造 NotificationBroadcasterSupport。每个监听器都由发送通知的线程调用。此构造函数等效于
NotificationBroadcasterSupport(null, info)。如果
info数组不为空,则构造函数将其克隆为info.clone(),并且每次调用getNotificationInfo()都会返回一个新的克隆。- 参数:
info- 一个数组,指示对于此 MBean 可能发送的每个通知,通知的 Java 类的名称和通知类型。可以为null,相当于一个空数组。- 自从:
- 1.6
-
NotificationBroadcasterSupport
构造一个 NotificationBroadcasterSupport,其中包含有关可能发送的通知的信息,以及使用给定的
Executor调用每个监听器的位置。调用
sendNotification时,如果添加了空值NotificationFilter或isNotificationEnabled为发送的通知返回 true,则选择一个监听器。对NotificationFilter.isNotificationEnabled的调用发生在调用sendNotification的线程中。然后,对于每个选定的监听器,使用调用handleNotification方法的命令调用executor.execute。如果
info数组不为空,则构造函数将其克隆为info.clone(),并且每次调用getNotificationInfo()都会返回一个新的克隆。- 参数:
executor- 方法sendNotification用于发送每个通知的执行程序。如果它为 null,调用sendNotification的线程将调用handleNotification方法本身。info- 一个数组,指示对于此 MBean 可能发送的每个通知,通知的 Java 类的名称和通知类型。可以为null,相当于一个空数组。- 自从:
- 1.6
-
-
方法详情
-
addNotificationListener
public void addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) 添加一个监听。- 指定者:
addNotificationListener在接口NotificationBroadcaster中- 参数:
listener- 接收通知的监听器。filter- 过滤器对象。如果 filter 为 null,则在处理通知之前不会执行任何过滤。handback- 发出通知时要发送回监听器的不透明对象。通知广播对象不能使用该对象。它应该与通知收听者的通知一起重新发送。- 抛出:
IllegalArgumentException- 如果监听器为空则抛出。- 参见:
-
removeNotificationListener
public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundException 从接口NotificationBroadcaster复制的描述从此 MBean 中移除监听。如果监听已注册到不同的交接对象或通知过滤器,则该监听对应的所有条目将被删除。- 指定者:
removeNotificationListener在接口NotificationBroadcaster中- 参数:
listener- 先前添加到此 MBean 的监听器。- 抛出:
ListenerNotFoundException- 监听器未在 MBean 中注册。- 参见:
-
removeNotificationListener
public void removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) throws ListenerNotFoundException 从接口NotificationEmitter复制的描述从此 MBean 中移除监听器。 MBean 必须具有与给定的
listener、filter和handback参数完全匹配的监听器。如果有多个这样的监听器,则只删除一个。当且仅当它们在要删除的监听器中为空时,
filter和handback参数可以为空。- 指定者:
removeNotificationListener在接口NotificationEmitter中- 参数:
listener- 先前添加到此 MBean 的监听器。filter- 添加监听器时指定的过滤器。handback- 添加监听器时指定的交接。- 抛出:
ListenerNotFoundException- 监听器未在 MBean 中注册,或者未在给定的过滤器和 handback 中注册。
-
getNotificationInfo
从接口NotificationBroadcaster复制的描述返回一个数组,指示对于此 MBean 可能发送的每个通知,通知的 Java 类的名称和通知类型。
MBean 发送此数组中未描述的通知并不是非法的。但是,MBean 服务的某些客户端可能依赖于完整的数组才能正常运行。
- 指定者:
getNotificationInfo在接口NotificationBroadcaster中- 返回:
- 可能通知的数组。
-
sendNotification
发送通知。如果在构造函数中指定了Executor,将为每个选定的监听器分配一个任务,以将通知传递给该监听器。- 参数:
notification- 要发送的通知。
-
handleNotification
protected void handleNotification(NotificationListener listener, Notification notif, Object handback) sendNotification为每个监听器调用此方法,以便将通知发送给该监听器。它可以在子类中被覆盖以更改通知传递的行为,例如在单独的线程中传递通知。此方法的默认实现等效于
listener.handleNotification(notif, handback);
- 参数:
listener- 接收通知的监听器。notif- 传递给监听器的通知。handback- 添加监听器时提供的交接对象。
-