URLs como Referencias para Federaciones
Federación es el proceso de "enganchar" sistemas de nombres para que
el sistema agregado pueda procesar nombres mixtos. Un significado básico por el
que federamos sistemas para unir la referencia de un sistema de nombrado a un
contexto en otro sistema de nombrado. La lección Almacenar
Objetos en Directorios contiene descripciones de la clase Reference
y cómo almacenar estas referencias desde el directorio.
El contenido de una referencia usado para federación no está restringido,
pero un tipo útil de referencia es uno que contiene un string URL. Podemos
crear una Reference desde un string URL creando un StringRefAddr
cuyo tipo sea "URL" y cuyo contenido es el string URL.
Aquí tenemos un ejemplo de una referencia a
un contexto del sistema de ficheros.
// Create the file system reference
Reference fsRef = new Reference("javax.naming.Context",
new StringRefAddr("URL", "file:/tmp"));
Podemos unir esta referencia a otros sistema de nombrado, como el LDAP.
ldapCtx.bind("cn=fs", fsRef);
El LDAP y el sistema de fichero ahora están federados.
Ahora, suministramos el nombre al proveedor de servicios LDAP que expande
ambos sistemas de nombres, el LDAP y el sistema de ficheros.
Object obj = ldapCtx.lookup("cn=fs/tutorial/report.txt");
Aunque el nombre "cn=fs" que está en el sistema de
nombres LDAP, está nombrando un objeto en el sistema de ficheros, el objeto
(contexto) llamado por la URL "file:/tmp".
Cuando el proveedor de servicios LDAP procesa la entrada "cn=fs",
le pide al JNDI que devuelva el contexto identificado por esa entrada para que
pueda continuar con la operación. El proveedor de servicio hace esto usando NamingManager.getContinuationContext()
y DirectoryManager.getContinuationDirContext(),
que se explican en la sección Construir
un Proveedor de Servicio. El JNDI, cuando ofrece una referencia que contiene
una "URL" StringRefAddr y no contiene un
nombre de factoría de clases, devolverá el string URL en la referencia dentro
de un contexto usando el mismo algoritmo usado para localizar una
implementación de contexto URL, como es explicó en la sección URLs
como Nombres del Contexto Inicial de esta lección. En el ejemplo anterior,
el JNDI usa la implementación de contexto file para procesar la
URL "file:/tmp". Luego usa el contexto resultante para
procesar el resto del nombre: "tutorial/report.txt".