Notificaciones de LDAP no Solicitadas
El LDAP v3 (RFC 2251)
define un notificación no solicitada, un mensaje que es envíado por un
servidor LDAP al cliente sin ninguna provocación por parte del cliente. Una
notificación no solicitada está representada en el JNDI por el inteface UnsolicitedNotification.
Como las notificaciones no solicitadas las envía el servidor de forma
asíncrona, podemos usar el mismo modelo de eventos usado para recibir
notificaciones sobre cambios en el espacio de nombres y en contenidos de
objetos. Registramos el interés en notificaciones no solicitadas registrando un
UnsolicitedNotificationListener
con un EventContext
o un EventDirContext.
Aquí tenemos un ejemplo de un UnsolicitedNotificationListener.
public class UnsolListener implements UnsolicitedNotificationListener {
public void notificationReceived(UnsolicitedNotificationEvent evt) {
System.out.println("received: " + evt);
}
public void namingExceptionThrown(NamingExceptionEvent evt) {
System.out.println(">>> UnsolListener got an exception");
evt.getException().printStackTrace();
}
}
Abajo tenemos un ejemplo que registra una implementación de UnsolicitedNotificationListener
con una fuente de eventos. Observa que sólo es importante el argumento listener
de EventContext.addNamingListener().
Los parámetros name y scope no son importantes para las
notificaciones no solicitadas.
// Get the event context for registering the listener
EventContext ctx = (EventContext)
(new InitialContext(env).lookup("ou=People"));
// Create the listener
NamingListener listener = new UnsolListener();
// Register the listener with the context (all targets equivalent)
ctx.addNamingListener("", EventContext.ONELEVEL_SCOPE, listener);
Cuando ejecutamos este programa, necesitamos apuntar a un servidor LDAP que
pueda generar notificaciones no solicitadas y provoque que el servidor emita la
notificiación. De otra forma después de un minuto, el programa saldrá
silenciosamente.
Un oyente que implementa UnsolicitedNotificationListener
también puede implementar otros interfaces NamingListener,
como NamespaceChangeListener
y ObjectChangeListener.