Sistema de Nombrado en Java (JNDI) [Parte I]

Los detalles de c�mo se usan los atributos LDAP para almacenar datos sobre objetos Java se describen en la RFC 2713. La RFC 2714 describe c�mo se almacenan las referencias a objetos CORBA en un directorio LDAP. Esta secci�n ofrece un r�pido sumario de estos documentos. Est� pensado principalmente para desarrolladores de proveedores de servicio LDAP. Normalmente los usuarios del API no necesitar�n est� informaci�n. Los proveedores y las factor�as de objetos/estados implementan estos detalles por eso los usuarios del API simplemente pueden usar m�todos como Context.bind() y Context.lookup() como se describe en las lecciones Almacenar Objetos en el Directorio y Leer Objetos del Directorio.

Los desarrolladores de proveedores de servicio LDAP y factor�as de estados/objetos, as� como aquellos que necesitan a�adir el esquema Java/CORBA a los servidores, deber�an consultar estos docmentos adem�s de leer esta secci�n.

.�Tipos de Objetos

Como se indic� en la lecci�n Factor�as de Estado, al servidor se le obliga a soportar el almacenamiento de los siguientes tipos de objetos.

Adem�s de estos tipos, el proveedor de servicios LDAP de Sun tiene factor�as de estado que soportan almacenamiento para objetos java.rmi.Remote y CORBA.

Los objetos Java se representan en el LDAP como subclases de la clase abstracta "javaObject". Esta clase de objeto define los atributos listados en la siguiente tabla.

Nombre Atributo LDAP Contenido
javaClassName (obligatorio) El nombre distinguido de la clase del objeto
javaClassNames Todos los otros nombres de clases e interfaces implementados por el objeto
javaCodebase La localizaci�n de los ficheros Class del objeto
javaDoc La localizaci�n de la documentaci�n de la clase del objeto
description La descripci�n textual del objeto

.�DirContext

Un objeto DirContext se almacena correctamente en el directorioo como una entrada LDAP que tiene atributos. En otras palabras, un proveedor de servicios LDAP extrae los atributos usando DirContext.getAttributes("") y los almacena en el directorio. Cuando dicha entrada es le�da desde el directorio, es devuelta como un DirContext (a menos que se use una factor�a de objetos).

.�Objetos Referenceable

Un objeto Referenceable se representa en el directorio por su referencia (Referenceable.getReference()).

Una Reference se representa en el directorio como una clase de objeto "javaNamingReference".

Esta clase de objeto define los atributos listados en la siguiente tabla.

Nombre Atributo LDAP Contenido
javaClassName (obligatorio) Reference.getClassName()
javaFactoryName Reference.getFactoryClassName()
javaCodebase Reference.getFactoryClassLocation()
javaReferenceAddress Reference.get()

"javaReferenceAddress" es un valor multi-valor que consiste en uno o m�s valores. Cada valor representa una RefAddr.

En la RFC 2713 puedes encontrar como se codifica una RefAddr. Ver la secci�n Trucos para Usuarios de LDAP para un ejemplo.

Una entrada LDAP que tiene estos atributos debe incluir "javaObject" y "javaNamingReference" en su lista de clases de objetos. Cuando estos atributos se leen desde una entrada LDAP, se usan para construir una Reference, que luego se usa para construir un objeto representado por la informaci�n de la referencia.

.�Objetos Serializable

Un objeto java.io.Serializable se representa en el directorio como una clase de objeto "javaSerializedObject". Esta clase define los atributos listados en la siguiente tabla.

Nombre Atributo LDAP Contenido
javaClassName (obligatorio) Object.getClass().getName()
javaSerializedData (mandatory) Serializado desde el objeto
javaClassNames Nombres de todos los interfaces y clases implementados por el objeto.
javaCodebase Lista separada por espacios de las URLs de directorios o ficheros JAR que contienen las clases del objeto serializado.

Una entrada LDAP que tenga estos atributos debe incluir "javaObject" y "javaSerializedObject" en su lista de clases de objetos. Cuando estos atributos se leen desde una entrada LDAP, se usan para reconstruir una copia del objeto serializado. El contenido del atributo "javaSerializedData" es des-serializado dentro de un java.lang.Object. Si est� disponible el atributo "javaCodebase", entonces las clases necesarias para la des-serializaci�n se cargan desde el codebase especifiado.

.�Objetos Marshalled

Formatear un objeto significa grabar su estado y su codebase(s) de forma en que cuando el objeto es des-formarteado, se obtiene una copia del objeto original, posiblemente cargando autom�ticamente las definiciones de las clases del objeto. Podemos "marshal" cualquier objeto que sea serializable o remoto (es decir, que implemente el interface java.rmi.Remote).

Formatear es como la serializaci�n, escepto en que tambi�n registra los codebases. Se diferencia de la serializaci�n en que trata especialmente los objetos remotos. Si un objeto es un java.rmi.Remote, entonces, el formateo registra el stub del objeto remoto, en vez del propio objeto remoto.

Como con la serializaci�n, cuando se formatea un objeto tambi�n se formatean su �rbol completo. Cuando se des-formatea un objeto se reconstruye su �rbol de objetos. Un objeto formateado est� representado por la clase java.rmi.MarshalledObject.

Se representa en el directorio como un objeto de la clase "javaMarshalledObject".

Esta clase define los atributos listados en la siguiente tabla.

Nombre Atributo LDAP Contenido
javaClassName (obligatorio) Object.getClass().getName() (del objeto des-formateado)
javaSerializedData (obligatorio) Serializado desde el objeto formateado
javaClassNames Nombres de todos los interfaces y clases implementados por el objeto (des-formateado)

Una entrada LDAP que tiene estos atributos debe incluir "javaObject" y "javaMarshalledObject" en su lista de clases de objetos. Cuando se leen estos atributos desde una entrada LDAP, se usan para construir una copia del objeto formateado. El contenido del atributo "javaSerializedData" es des-serializado dentro de un objeto java.rmi.MarshalledObject.

Una factor�a de objetos responsable de objetos formateados puede entonces des-formatear el objeto llamando a java.rmi.MarshalledObject.get().

.�Objetos CORBA

Los objetos CORBA se representan en el LDAP como subclases de la clase abstracta "corbaObject". Esta clase difine la lista de atributos de al siguiente tabla.

Nombre Atributo LDAP Contenido
corbaRepositoryId Ids de los interfaces implementados por el objeto
description Descripci�n textual del objeto

Un objeto CORBA se almacena en el directorio grabando su objeto referencia CORBA. Un objeto referencia CORBA se representa en el directorio como un objeto de la clase "corbaObjectReference". Esta clase define los atributos listados en la siguiente tabla.

Nombre Atributo LDAP Contenido
corbaObjectReference (obligatorio) Forma Stringified del objeeto referencia CORBA

Una entrada LDAP que tenga este atributo debe incluir "corbaObject" y "corbaObjectReference" en su lista de clases de objetos. Cuando se lee este atributo desde una entrada LDAP, se usa para reconstruir el objeto referencia stringified, que luego es usado por una factor�a de objetos para obtener el correspondiente objeto CORBA "vivo".

.�Objetos Remote

Un objeto java.rmi.Remote que usa el protocolo JRMP se almacena en el directorio como una Reference que contiene una URL RMI o como un objeto formateado. Un objeto java.rmi.Remote que usa el protocolo IIOP se almacena en el directorio como un objeto CORBA, es decir, se almacena el objeto referencia CORBA del objeto CORBA original.

.�Esquemas

El Esquema Java y el Esquema CORBA que necesitamos a�adir a nuestro dirctorio est�n incluidos en este tutorial. Ver las RFC 2713 y RFC 2714 para m�s detales.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO