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

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;
}

COMPARTE ESTE ARTÍCULO

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