El Siguiente Sistema de Nombres
Una vez que el proveedor de servicios ha determinado el puntero nns
usando las técnicas descritas en la la página anterior,
debe devolver el puntero nns dentro de un contexto, llamado contexto
de continuación, y continuar la operación en ese contexto. Para hacer
esto, el JNDI proporciona los siguientes métodos de utilidad.
El argumento a estos métodos es un CannotProceedException.
El propósito de estos métodos es obtener un contexto en el nns en el
que continuar la operación usando el puntero nns y otra información de
la CannotProceedException.
El Contexto de Continuación
El JNDI obtiene el contexto de continuación basándose en la información
suministrada en la CannotProceedException. El proveedor de
servicios debe completar esta información. La siguiente tabla describe los
campos de esta excepción.
| Campo |
Descripción |
| resolved name |
El nombre del objeto resuelto, en relación al contexto original para esta operación. |
| resolved object |
El puntero nns. Este se usa como argumento objeto para la factoría de objetos. |
| remaining name |
La parte del nombre mixto que falta por procesar. |
| "alt" name |
El nombre del objeto resuelto, en relación al nombre de contexto
"alt". Se usa como argumento nombre para la factoría de objetos. |
| "alt" name context |
El contexto en el que resolver el nombre "alt". Se usa como el
argumento context para la factoría de objetos. |
| environment |
El entorno del contexto actual. Se usa como argumento entorno para la
factoría de objetos. |
| remaining new name |
El nombre restante para usar como argumento "new name" para Context.rename().
|
El JNDI usa la información de la excepción para encontrar un objecto
factoría, descrito en la lección Objectos
Factoría, que devuelve un ejemplar de Context.
Si el JNDI no puede encontrar el contexto apropiado en el que continuar la
operación, lanza la CannotProceedException recibida desde el
proveedor de servicios.
Resolver a través de Subinterfaces
Observamos en las descripciones anteriores que el objeto factoría que produce
el contexto de continuación debe devolver un ejemplar de Context.
El ejemplar no necesita implementar otros subinterfaces de Context.
Eso es por lo que no tiene sentido requerir que el sistema de nombres intermedio
implemente todos los subinterfaces del sistema de nombres terminal. Para que la
resolución tenga éxito, el JNDI tiene los siguientes requerimientos.
- Los proveedores para los sistemas de nombres originador y terminal deben
implementar el subinterface.
- Los proveedores para todos los otros sistemas de nombres intemedios deben
implementar el subinterface o los interfaces Resolver
y Context.
El interface Resolver está pensado para permitir la resolución
para proceder a través de un proveedor que soporta el interface de otro que lo
hace. DirectoryManager.getContinuationDirContext() usa
automáticamente el interface Resolver cuando lo necesita.
Puedes ir a la sección Construir
un Proveedor de Servicios para ver más detalles.
Completar la Operación
Después de que el proveedor obtenga un contexto de continuación, llama a la
operación de contexto original sobre el contexto de continuación usando como
argumento nombre el resto de los componentes del nombre mixto. Aquí tenemos un
ejemplo que hace esto para DirContext.search().
DirContext cctx = DirectoryManager.getContinuationDirContext(cpe);
answer = cctx.search(cpe.getRemainingName(), matchingAttrs);
El proceso continúa en el siguiente sistema de nombres. Ahora se
repite el siguiente proceso de tres pasos hasta que el se alcanza el sistema de
nombres terminal.
- Determinar los componentes del nombre mixto a procesar.
- Procesar los resultados del paso 1.
- Continuar en el siguiente sistema de nombres.
En este punto, se llava a cabo la operación real.