public class NotificationBroadcasterSupport extends Object implements NotificationEmitter
提供NotificationEmitter
接口的实现。 这可以用作发送通知的MBean的超类。
默认情况下,通知调度模型是同步的。 也就是说,当线程调用sendNotification时,在该线程中调用每个侦听器的NotificationListener.handleNotification
方法。 您可以覆盖此默认通过重写handleNotification
,或通过传递一个Executor给构造一个子类。
如果过滤器或侦听器的方法调用抛出异常
,则该异常不会阻止其他侦听器被调用。 然而,如果或过滤器的方法调用Executor.execute
或handleNotification
(无时Excecutor
被指定)抛出Error
,则该Error
被传播到的呼叫者sendNotification
。
使用JMX Remote API添加的远程侦听器(见JMXConnector)通常不会同步调用。 也就是说,当sendNotification返回时,不能保证任何远程侦听器尚未收到通知。
Constructor and Description |
---|
NotificationBroadcasterSupport()
构造一个NotificationBroadcasterSupport,其中每个侦听器被发送通知的线程调用。
|
NotificationBroadcasterSupport(Executor executor)
构造一个NotificationBroadcasterSupport,其中使用给定的 Executor 调用每个侦听器。
|
NotificationBroadcasterSupport(Executor executor, MBeanNotificationInfo... info)
|
NotificationBroadcasterSupport(MBeanNotificationInfo... info)
构建一个NotificationBroadcasterSupport,其中包含可能发送的通知的信息。
|
Modifier and Type | Method and Description |
---|---|
void |
addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback)
添加一个监听器。
|
MBeanNotificationInfo[] |
getNotificationInfo()
返回一个数组,指示MBean可能发送的每个通知,通知的Java类的名称和通知类型。
|
protected void |
handleNotification(NotificationListener listener, Notification notif, Object handback)
为每个侦听器调用此方法
sendNotification 才能将通知发送给该侦听器。
|
void |
removeNotificationListener(NotificationListener listener)
从这个MBean中删除一个监听器。
|
void |
removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback)
从这个MBean中删除一个监听器。
|
void |
sendNotification(Notification notification)
发送通知。
|
public NotificationBroadcasterSupport()
NotificationBroadcasterSupport(null, null)
。
public NotificationBroadcasterSupport(Executor executor)
Executor
调用每个侦听器。
当调用sendNotification
时,如果添加了一个null NotificationFilter
,或者如果isNotificationEnabled
为正在发送的通知返回true,则选择一个侦听器。
NotificationFilter.isNotificationEnabled
的调用发生在调用sendNotification
的线程中。
然后,对于每个所选择的监听器, executor.execute
被调用,调用一个命令handleNotification
方法。
该构造函数相当于NotificationBroadcasterSupport(executor, null)
。
executor
- 方法sendNotification
使用的执行器发送每个通知。
如果为null,调用sendNotification
的线程将自动调用handleNotification
方法。
public NotificationBroadcasterSupport(MBeanNotificationInfo... info)
构建一个NotificationBroadcasterSupport,其中包含可能发送的通知的信息。 发送通知的线程调用每个侦听器。 该构造函数相当于NotificationBroadcasterSupport(null, info)
。
如果info
数组不为空,则通过构造克隆仿佛info.clone()
,并且每次调用getNotificationInfo()
返回一个新的克隆。
info
- 一个数组,指示MBean可能发送的每个通知,通知的Java类的名称和通知类型。
可以为空,这相当于一个空数组。
public NotificationBroadcasterSupport(Executor executor, MBeanNotificationInfo... info)
构造一个NotificationBroadcasterSupport,其中包含有关可能发送的通知的信息,以及使用给定的Executor
调用每个监听器的信息 。
当sendNotification
被调用时,选择了一个监听器,如果它是用空加NotificationFilter
,或isNotificationEnabled
的通知返回true发送。 NotificationFilter.isNotificationEnabled
的调用发生在调用sendNotification
的线程中。 然后,对于每个所选择的监听器, executor.execute
被调用,调用一个命令handleNotification
方法。
如果info
数组不为空, info
函数克隆,就像通过info.clone()
,并且每次调用getNotificationInfo()
返回一个新的克隆。
executor
- 方法sendNotification
使用的执行器发送每个通知。
如果为null,调用sendNotification
的线程将自动调用handleNotification
方法。
info
- 一个数组,指示MBean可能发送的每个通知,通知的Java类的名称和通知类型。
可以为空,这相当于一个空数组。
public void addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback)
addNotificationListener
在接口
NotificationBroadcaster
listener
- 接收通知的侦听器。
filter
- 过滤器对象。
如果过滤器为空,则在处理通知之前不会执行过滤。
handback
- 发出通知时要发送回侦听器的不透明对象。
该通知广播对象无法使用此对象。
通知发送者应该重新发送更改。
IllegalArgumentException
- 如果监听器为空,则抛出。
removeNotificationListener(javax.management.NotificationListener)
public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundException
NotificationBroadcaster
复制
removeNotificationListener
中的
NotificationBroadcaster
listener
- 以前添加到此MBean的侦听器。
ListenerNotFoundException
- 监听器未注册到MBean。
NotificationBroadcaster.addNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
,
NotificationEmitter.removeNotificationListener(javax.management.NotificationListener, javax.management.NotificationFilter, java.lang.Object)
public void removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) throws ListenerNotFoundException
NotificationEmitter
复制
从这个MBean中删除一个监听器。 该MBean必须有一个与给定匹配的侦听listener
, filter
和handback
参数。 如果有多个这样的听众,只有一个被删除。
filter
和handback
参数可以为null,当且仅当它们在要删除的侦听器中为空时。
removeNotificationListener
在接口
NotificationEmitter
listener
- 以前添加到此MBean的侦听器。
filter
- 添加侦听器时指定的过滤器。
handback
- 添加侦听器时指定的回传。
ListenerNotFoundException
- 监听器没有向MBean注册,或者没有向给定的过滤器和回传注册。
public MBeanNotificationInfo[] getNotificationInfo()
NotificationBroadcaster
复制
返回一个数组,指示MBean可能发送的每个通知,通知的Java类的名称和通知类型。
MBean发送不在此阵列中描述的通知并不是非法的。 但是,MBean服务器的某些客户端可能依赖于正确运行的阵列。
getNotificationInfo
在接口
NotificationBroadcaster
public void sendNotification(Notification notification)
Executor
中指定了一个Executor,则每个选定的侦听器将为其提供一个任务,以将该通知传递给该侦听器。
notification
- 发送通知。
protected void handleNotification(NotificationListener listener, Notification notif, Object handback)
为每个侦听器调用此方法sendNotification
才能将该通知发送给该侦听器。 在子类中可以覆盖它,以更改通知传递的行为,例如在单独的线程中传递通知。
此方法的默认实现方式相当于
listener.handleNotification(notif, handback);
listener
- 正在传递通知的收听者。
notif
- 正在传递给收听者的通知。
handback
- the handback object that was supplied when the listener was added.