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

Sistema de Nombrado en Java (JNDI) y II
Autor: Sun
Traductor: Juan Antonio Palos (Ozito)


En esta página:


Esquema

El paquete javax.naming.directory contiene los siguientes métodos (además de sus sobrecargas java.lang.String) para tratar con esquemas de directorio:

Cómo usa estos métodos un usuario del API se explicó en la lección Esquemas.

getSchema(), getAttributeDefinition(), y getAttributeSyntaxDefinition() devuelven un puntero a un árbol de esquema, mientras que getSchemaClassDefinition() devuelve un contexto cuyos hijos vienen del árbol de esquema. La siguiente figura explica la relación entre el árbol de directorio y el árbol de esquema.

Si una implementación de contexto no soporta devolver información de esquema, estos métodos deberían lanzar una OperationNotSupportedException. Aunque una implementación de contexto normalmente soporta todos o ninguno de estos cuatro métodos, también podría soportar sólo alguno de ello. Además, algunos servidores de directorios no exportan todos los datos requeridos para rellenar completamente el árbol de esquema. Por lo tanto, una implementación de contexto podría no poder devolver datos relevantes para todos estos métodos.

Estrategias de Implementación

Una implementación de contexto que soporte métodos de esquema debería seguir las recomendaciones de la Guideline for LDAP Service Providers cuando elija los nombres de atributos a utilizar para describir los datos del esquema.

Una estrategia común es construir un árbol de esquema en memoria que sea un espejo del mostrado en la figura. Podría existir más de un árbol de esquema por cada implementación de contexto porque getSchema() accepta un argumento Name. Si hay uno o más árboles de esquema depende del servicio subyacente y/o la configuración del servidor. Un servidor LDAP, por ejemplo, podría configurarse para tener diferentes árboles de esquema para diferentes partes de su árbol de directorio. Un usuario del API que llama a getSchema() sobre diferentes partes del árbol podría esperar obtener los correspondientes (y posiblemente diferentes) árboles de esquema.

Cada nodo en el árbol es un DirContext y representa una definición de esquema. El nodo tiene atributos asociados que describen las definiciones de esquema. Estos atributos se describen en la lección Esquemas. Los contenidos de cada nodo (nombre y atributos) están determinados por el servicio de directorio subyacente y la información de esquema del servidor. Por ejemplo, una implementación de contexto podría tener un esquema interno (fijo), mientras que otra podria obtener dinámicamente los datos del esquema desde el servicio de directorio.

Para getSchemaClassDefinition(), necesitamos crear un nuevo ejemplar de DirContext y unirlos como nodos hijos que representan las definiciones de clases del objeto nombrado. Por ejemplo, si el objeto nombrado es de las clases "top" y "person", el ejemplar de DirContext tendrá dos nodos hijos DirContext, uno representando la definición de "top" y otro para "person". Los DirContexts "top" y "person" son nodos de la rama "ClassDefinition" del árbol de esquema (la apuntada por getSchema()).

Definiciones de Atributos

Para implementar los métodos de esquema del interface Attribute, necesitamos proporcionar una clase que implemente este interface o una subclase de BasicAttribute que sobreescriba los dos métodos de esquema. Nuestra implementación de contexto, cuando se le pida que devuelta cualquier Attribute, devolverá ejemplares de esta clase. Si usamos un árbol de esquema en-memoria como se sugerió anteriormente, entonces getAttributeDefinition() devolverá un nodo de la rama "AttributeDefinition" del árbol de esquema, mientras que getAttributeSyntaxDefinition() devolverá un nodo de la rama "SyntaxDefinition".

Características Avanzadas

Los nodos DirContext devueltos por los métodos de esquema son objetos DirContext totalmente maduros. Esto significa que son libres de implementar, o no, todos los métodos disponibles en el interface DirContext.

Una implementación de contexto soporta actualizaciones de objeto del esquema sólo con la extensión de que las correspondientes actualizaciones serán reflejadas en los datos de esquema del servicio de directorio subyacente. Por ejemplo, nunca deberíamos permitir que un DirContext sea eliminado del árbol de esquema a menos que la definición del esquema correspondiente sea eliminada del servicio de directorio subyacente.

Optimizaciones

Normalmente cuesta mucho generar un árbol de esquema. La generación implica leer los datos del esquema desde el servicio de directorio y analizar los datos y luego construir un árbol en la memoria. Para mejorar el rendimiento, una implementación de contexto puede almacenar el árbol de esquema para que pueda ser compartido por varios contextos. Por supuesto, dicha compartición debería permitirse si no compromete la corrección y la seguridad.


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