En esta página: Eventos de Nombrado Después de que un NamespaceChangeListener o un ObjectChangeListener hayan sido registrados con una fuente, obtendrán notificaciones de eventos en la forma de NamingEvents. Un ejemplar de esta clase contiene información sobre el evento, como su tipo y la fuente del evento, e información sobre el objeto que causó el disparo del evento. Normalmente, una fuente de evento crea un ejemplar de NamingEvent y se lo pasa a los oyentes de nombrado. Estos oyentes pueden usar los métodos de acceso del ejemplar de NamingEvent para obtener información sobre el evento. Tipo de Evento Un NamingEvent contiene un tipo que identifica el tipo del evento. Un tipo de evento podría ser, por ejemplo object-added o object-changed. Los tipos de eventos están divididos entre aquellos que afectan al espacio de nombres (como el tipo object-added) y aquello que no le afectan (como un tipo object-changed). Aquí tenemos los tipos de eventos definidos por la clase NamingEvent.
El tipo de evento se obtiene usando getType(). Fuente de Evento Una fuente de evento es la entidad que disparó el evento en el objeto con el que el oyente está registrado. Es un ejemplar de EventContext o EventDirContext. Puedes ir a la sección Registro de Oyentes para más infomación sobre estos dos interfaces. La fuente de evento se obtiene usando getEventContext() o java.util.EventObject.getSource(). Estos métodos sólo se diferencian en que getEventContext() devuelve el resultado como un EventContext mientras que getSource() devuelve el resultado en un java.lang.Object. Podemos usar la fuente de evento para obtener más información sobre el objeto u objetos que lo lanzaron. Si usamos este método, debemos sincronizar su acceso. Esto es porque las implementaciones de Context no están garantizadas para ser seguras antes los threads (y EventContext es un subinterface de Context). Aquí hay un código de oyente que usa la fuente de eventos. Attributes attrs; // Get the event source EventContext ctx = evt.getEventContext(); // Get the name of the object that changed // Should really check for null binding first. String which = evt.getNewBinding().getName(); // Lock the event source synchronized(ctx) { attrs = ctx.getAttributes(which, new String[]{"objectclass"}); } // Do something useful with attrs Otra Información Un NamingEvent contiene, además del tipo de evento y la fuente, las uniones nueva y vieja del objeto que causó el evento, así como otra información adicional. Usamos getNewBinding() para obtener un ejemplar de Binding que describe el estado del objeto después del evento ocurrido. El Binding contiene el nombre del objeto, el propio objeto, y sus atributos. Cualquiera de estos datos podría no existir si el proveedor de servicios no puede suministrarlos. Usamos getOldBinding() para obtener información similar sobre el objeto antes de que ocurriera el evento. Observa que el nombre de las úniones nueva y vieja está en relación a la fuente del evento. Por ejemplo, supongamos que nuestro programa usa el siguiente código para registrar un oyente. EventContext ctx = (EventContext) (new InitialContext(env).lookup("ou=People")); // Create the listener NamingListener listener = new SampleNCListener("nc1"); // Register the listener for namespace change events ctx.addNamingListener("ou=Objects,cn=John Smith", EventContext.ONELEVEL_SCOPE, listener); Cuando se añade el objeto "cn=String" bajo "ou=Objects", el nombre en la unión del NamingEvent tiene el nombre "cn=String, ou=Objects, cn=John Smith". Además, podemos usar getChangeInfo() para obtener cualquier información de cambio que el servidor o el proveedor de servicio haya suministrado. Por ejemplo, el servidor podría enviar un identifiador que identifica el cambio.
|