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

Sistema de Nombrado en Java (JNDI) [Parte I]
Autor: Sun
Traductor: Juan Antonio Palos (Ozito)


En esta página:


Ejemplo de Objeto Personalizado

Este ejemplo ilustra cómo un tipo arbitrario (por ejemplo, Person) puede almacenarse y ser leído desde un directorio usando estados personalizados y factorías de objetos.

// Create the object to be bound
Person john = new Person("Smith", "John Smith");

// Perform the bind
ctx.rebind("cn=John Smith", john);

// Read back the object
Person john2 = (Person) ctx.lookup("cn=John Smith");

Aunque este ejemplo usa tanto una factoría de estado como una factoría de objetos, nos enfocaremos en la factoría de estado. Puedes ir a la lección Factorías de Objetos para ver una explicación más detallada sobre este tipo de factorías.

En este ejemplo se usa el proveedor de servicios LDAP de Sun. Cuando se llama a Context.bind() sobre este proveedor, usa DirectoryManager.getStateToBind() para recuperar el estado del objeto a unir. Este ejemplo especifica en el fichero jndi.properties las factorías que usa.

java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
java.naming.factory.state=PersonStateFactory
java.naming.factory.object=PersonObjectFactory

La PersonStateFactory acepta un ejemplar de Person y devuelve un ejemplar de DirStateFactory.Result que contiene los atributos que representan al objeto Person.

public DirStateFactory.Result getStateToBind(
    Object obj, Name name, Context ctx, Hashtable env, Attributes inAttrs)
    throws NamingException {

    // Only interested in Person objects
    if (obj instanceof Person) {

        Attributes outAttrs;
        if (inAttrs == null) {
            outAttrs = new BasicAttributes(true);
        } else {
            outAttrs = (Attributes)inAttrs.clone();
        }

        // Set up the object class
        if (outAttrs.get("objectclass") == null) {
            BasicAttribute oc = new BasicAttribute("objectclass", "person");
            oc.add("top");
            outAttrs.put(oc);
        }

        Person per = (Person)obj;
        // Mandatory attributes
        if (per.surname != null) {
            outAttrs.put("sn", per.surname);
        } else {
            throw new SchemaViolationException("Person must have surname");
        }
        if (per.commonName != null) {
            outAttrs.put("cn", per.commonName);
        } else {
            throw new SchemaViolationException("Person must have common name");
        }

        // Optional attributes
        if (per.passwd != null) {
            outAttrs.put("userPassword", per.passwd);
        }
        if (per.phone != null) {
            outAttrs.put("telephoneNumber", per.phone);
        }
        if (per.seeAlso != null) {
            outAttrs.put("seeAlso", per.seeAlso);
        }
        if (per.desc != null) {
            outAttrs.put("description", per.desc);
        }

        //System.out.println("state factory: " + outAttrs);
        return new DirStateFactory.Result(null, outAttrs);
    }
    return null;
}

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