Module java.naming

Class NamingEvent

java.lang.Object
java.util.EventObject
javax.naming.event.NamingEvent
所有已实现的接口:
Serializable

public class NamingEvent extends EventObject
此类表示由命名/目录服务触发的事件。

NamingEvent的状态包括

  • 事件源:触发此事件的EventContext
  • 事件类型。
  • 新绑定:更改后对象的信息。
  • 旧绑定:更改前对象的信息。
  • 更改信息:触发此事件的更改信息;通常是特定于服务提供程序或服务器的信息。

请注意,事件源始终是与监听器注册的相同EventContext 实例。此外,在NamingEvent中的绑定名称始终是相对于该实例的。例如,假设监听器进行以下注册:

     NamespaceChangeListener listener = ...;
     src.addNamingListener("x", SUBTREE_SCOPE, listener);
随后删除命名为"x/y"的对象时,相应的NamingEvent (evt)必须包含:
     evt.getEventContext() == src
     evt.getOldBinding().getName().equals("x/y")
在多个线程同时访问同一EventContext时必须小心。有关线程问题的更多信息,请参阅包描述
自 JDK 版本:
1.3
参见:
  • Field Details

    • OBJECT_ADDED

      public static final int OBJECT_ADDED
      用于指示已添加新对象的命名事件类型。此常量的值为0
      参见:
    • OBJECT_REMOVED

      public static final int OBJECT_REMOVED
      用于指示已删除对象的命名事件类型。此常量的值为1
      参见:
    • OBJECT_RENAMED

      public static final int OBJECT_RENAMED
      用于指示已重命名对象的命名事件类型。请注意,某些服务可能会为单个逻辑重命名操作触发多个事件。例如,重命名操作可能通过添加具有新名称的绑定并删除旧绑定来实现。

      NamingEvent中的旧/新绑定可能为null,如果旧名称或新名称在监听器注册的范围之外。

      当命名空间树中的内部节点被重命名时,应使用作为监听器范围一部分的最顶层节点来生成重命名事件。支持此操作的程度是特定于提供程序的。例如,服务可能为更改的内部节点的所有后代生成重命名通知,相应的提供程序可能无法阻止这些通知传播到监听器。

      此常量的值为2

      参见:
    • OBJECT_CHANGED

      public static final int OBJECT_CHANGED
      用于指示已更改对象的命名事件类型。更改可能包括对象的属性或对象本身。请注意,某些服务可能会为单个修改触发多个事件。例如,修改可能通过首先删除旧绑定并添加包含相同名称但不同对象的新绑定来实现。

      此常量的值为3

      参见:
    • changeInfo

      protected Object changeInfo
      包含生成此事件的更改信息。
    • type

      protected int type
      包含此事件的类型。
      参见:
    • oldBinding

      protected Binding oldBinding
      包含更改前对象的信息。
    • newBinding

      protected Binding newBinding
      包含更改后对象的信息。
  • Constructor Details

    • NamingEvent

      public NamingEvent(EventContext source, int type, Binding newBd, Binding oldBd, Object changeInfo)
      构造NamingEvent的实例。

      newBdoldBd中的名称应相对于事件源source进行解析。对于OBJECT_ADDED事件类型,newBd不能为空。对于OBJECT_REMOVED事件类型,oldBd不能为空。对于OBJECT_CHANGED事件类型,newBdoldBd不能为空。对于OBJECT_RENAMED事件类型,如果新名称或旧名称在监听器注册的范围之外,则newBdoldBd中的一个可以为null。

      参数:
      source - 触发此事件的非null上下文。
      type - 事件的类型。
      newBd - 可能为null的更改前绑定。请参阅方法描述。
      oldBd - 可能为null的更改后绑定。请参阅方法描述。
      changeInfo - 可能为null的包含更改信息的对象。
      参见:
  • Method Details

    • getType

      public int getType()
      返回此事件的类型。
      返回:
      此事件的类型。
      参见:
    • getEventContext

      public EventContext getEventContext()
      检索触发此事件的事件源。这将返回与EventObject.getSource()相同的对象。

      如果此方法的结果用于访问事件源,例如查找对象或获取其属性,则需要锁定该对象,因为Context的实现不能保证是线程安全的(而EventContextContext的子接口)。有关线程问题的更多信息,请参阅包描述

      返回:
      触发此事件的非null上下文。
    • getOldBinding

      public Binding getOldBinding()
      检索更改前对象的绑定。

      如果对象在更改前相对于源上下文(getEventContext())存在,则绑定必须为非null。也就是说,对于OBJECT_REMOVEDOBJECT_CHANGED,它必须为非null。对于OBJECT_RENAMED,如果重命名前的对象在监听器注册兴趣的范围之外,则它为null;如果重命名前的对象在重命名前在范围内,则它为非null。

      绑定中的名称应相对于事件源getEventContext()进行解析。由Binding.getObject()返回的对象可能为null,如果此信息不可用。

      返回:
      更改前对象的可能为null的绑定。
    • getNewBinding

      public Binding getNewBinding()
      检索更改后对象的绑定。

      如果对象在更改后相对于源上下文(getEventContext())存在,则绑定必须为非null。也就是说,对于OBJECT_ADDEDOBJECT_CHANGED,它必须为非null。对于OBJECT_RENAMED,如果重命名后的对象在监听器注册兴趣的范围之外,则它为null;如果重命名后的对象在重命名后在范围内,则它为非null。

      绑定中的名称应相对于事件源getEventContext()进行解析。由Binding.getObject()返回的对象可能为null,如果此信息不可用。

      返回:
      更改后对象的可能为null的绑定。
    • getChangeInfo

      public Object getChangeInfo()
      检索此事件的更改信息。更改信息的值是特定于服务的。例如,它可以是标识服务器上更改的更改日志中的 ID。
      返回:
      此事件的可能为null的更改信息。
    • dispatch

      public void dispatch(NamingListener listener)
      调用此事件上的适当监听器方法。此方法的默认实现处理以下事件类型:OBJECT_ADDED, OBJECT_REMOVED, OBJECT_RENAMED, OBJECT_CHANGED

      监听器方法在与此方法相同的线程中执行。有关线程问题的更多信息,请参阅包描述

      参数:
      listener - 非空监听器。