En esta página: Definición de Clases Objeto Todas la entradas LDAP en el directorio son "tipadas". Es decir, toda entrada pertenece a una clase objeto que identifia el tipo que dato representado por la entrada. La clase especifica los atributos obligatorios y opcionales que se pueden asociar con una entrada de esta clase. Las clases objeto para todos los objetos del directorio forman un árbol de clases. Las clases "top" y "alias" están en la raíz del árbol. Por ejemplo, la clase "organizationalPerson" es una subclase de la clase "Person", que a su vez es una subclase de "top". cuando creamos una nueva entrada LDAP, siempre debemos especificar todas las clases objeto a las que pertenece la nueva entrada. Como muchos directorios no soportan subclasificación de clases objeto, siempre deberíamos incluir todas las superclases de la entrada. Por ejemplo, para un objeto "organizationalPerson", deberiamos listar en sus clases objeto las clases "organizationalPerson", "person", y "top". Hay disponibles tres tipos de clases objeto:
En el árbol de esquema, el nombre "ClassDefinition" está unido a un objeto de un contexto plano DirContext que representa las definiciones de la clase del esquema. Por ejemplo, si un directorio soporta una clase "person", entonces el contexto "ClassDefinition" tendrá una unión con el nombre "person" que está unido a un objeto DirContext. Todo objeto en el contexto "ClassDefinition" tiene atributos obligatorios y opcionales mostrados en la siguiente tabla. Sólo "NUMERICOID" es obligatorio.
Estos atributos corresponden a la definición de "ObjectClassDescription" de la RFC 2252. Todos los valores de atributos están representados por la clase java.lang.String. Algunos directorios no publican todos los datos del esquema. Por ejemplo el Netscape Directory Server v4.1 no publica si una clase objeto es abstracta, estructural o auxiliar. En dichos casos, los objetos del esquema no describen completamente las definiciones de las clases de objetos. Recuperar el Objeto Esquema de una Clase Objeto Para recuperar el objeto esquema de una clase objeto, la buscamos en el árbol de esquema. Por ejemplo, podemos obtener el objeto esquema que representa a la clase objeto "person" usando el siguiente código. // Get the schema tree root DirContext schema = ctx.getSchema(""); // Get the schema object for "person" DirContext personSchema = (DirContext)schema.lookup("ClassDefinition/person"); Si obtenemos los atributos del objeto esquema personSchema, veremos lo siguiente: NUMERICOID: 2.5.6.6 NAME: person MAY: description, seealso, telephonenumber, userpassword MUST: objectclass, sn, cn DESC: Standard ObjectClass SUP: top Además de usar lookup(), podemos usar otros métodos como list() o search() para recuperar los objetos esquema del árbol de esquema. Obtener las Clases Objeto de una Entrada Dando un DirContext que representa una entrada LDAP, podemos obtener las clases objeto de la entrada llamando a DirContext.getSchemaClassDefinition() sobre él. Abajo hay un ejemplo que enumera las definiciones de clases objeto de la entrada "cn=Ted Geisel, ou=People". getSchemaClassDefinition() devuelve un contexto que contiene las definiciones de las clases objeto de la entrada. Usando este contexto, podemos buscar una definición individual, enumerar todas las definiciones, o realizar otras operaciones DirContext. // Create the initial context DirContext ctx = new InitialDirContext(env); // Get context containing class definitions for the "cn=Ted Geisel" entry DirContext tedClasses = ctx.getSchemaClassDefinition("cn=Ted Geisel, ou=People"); // Enumerate the class definitions NamingEnumeration enum = tedClasses.search("", null); while (enum.hasMore()) { System.out.println(enum.next()); } Añadir una Nueva Clase Objeto
Añadir una nueva clase objeto al esquema es como añadir una nueva entrada al directorio. Esto es así porque el árbol de esquema y los objetos esquema son objetos DirContext. Abajo hay un ejemplo que añade una nueva clase objeto ("fooObjectClas") al esquema. Primero declara los atributos que describen la nueva clase objeto y luego añade la definición de la clase objeto al esquema usando DirContext.createSubcontext(): // Specify attributes for the schema object Attributes attrs = new BasicAttributes(true); // Ignore case attrs.put("NUMERICOID", "1.3.6.1.4.1.42.2.27.4.2.3.1.1.1"); attrs.put("NAME", "fooObjectClass"); attrs.put("DESC", "for JNDITutorial example only"); attrs.put("SUP", "top"); attrs.put("STRUCTURAL", "true"); Attribute must = new BasicAttribute("MUST", "cn"); must.add("objectclass"); attrs.put(must); // Get the schema tree root DirContext schema = ctx.getSchema(""); // Add the new schema object for "fooObjectClass" DirContext newClass = schema.createSubcontext("ClassDefinition/fooObjectClass", attrs); Modificar una Clase Objeto No podemos modificar una clase objeto existente. Primero debemos borrar la definición de la clase objeto que queremos editar y luego añadir la versión actualizada. Borrar una Clase Objeto
Borrar una clase objeto existente del esquema es como borrar una entrada del directorio. Aquí tenemos un ejemplo que elimina la clase objeto "fooObjectClass" del esquema usando DirContext.destroySubcontext(): // Get the schema tree root DirContext schema = ctx.getSchema(""); // Remove the schema object for "fooObjectClass" schema.destroySubcontext("ClassDefinition/fooObjectClass"); Algunos servidores podrían no permitirnos borrar una clase objeto que está siendo usada por entradas del directorio. Podríamos evitar esta restricción desactivando el chequeo de esquema.
|