Programación en castellano Añadir una dirección | Buscador | Cursos | Artículos | Foros | Formación

Sistema de Nombrado en Java (JNDI) [Parte I]
Autor: Sun
Traductor: Juan Antonio Palos (Ozito)


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.

  • NamingEvent.OBJECT_CHANGED.

    Un contenido de un objeto ha cambiado. Por ejemplo, uno de sus atributos se ha eliminado o quizás su unión ha sido reemplazada.

  • NamingEvent.OBJECT_ADDED.

    Se ha añadido un nuevo objeto al espacio de nombres.

  • NamingEvent.OBJECT_REMOVED.

    Se ha eliminado un objeto existente del espacio de nombres

  • NamingEvent.OBJECT_RENAMED.

    Se le ha dado otro nombre a un objeto existente. Observa que no todos los servicios de nombrado soportan la generación de eventos rename. Por ejemplo, un objeto que está siendo renombrado podría manifestarse como un objeto que está siendo eliminado y otro que está siendo añadido.

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.


Principio Página
© 1999-2002, Programación en castellano, s.l.
Contacto - Datos legales

ReD Internet: Hospedaje Web | envio sms gratis | Salvapantallas | Fondos de Escritorio, famosas | melodias moviles gratis| Gratis