Versiones de Protocolos
El LDAP está disponible como versión 2 y como
versión 3. Como
se explicó en la lección Comparación de los Modelos
LDAP y JNDI, las dos versiones difieren en muchas características (como las
remisiones y los mecanismos de autentificación conectables) que son parte de la versión
3 pero no están disponibles en la versión 2. Pero para la mayoría de los casos cuando
usemos el JNDI para acceder al servicio LDAP, no veremos diferencias entre las dos
versiones.
El proveedor de servicio LDAP de Sun soporta la dos versiones. La selección del protocolo
a utilizar depende principalmente de qué versión del servidor LDAP soporta. Por defecto,
el proveedor LDAP primero usa la versión 3 para comunicar con el servidor LDAP
especificado. Si el servidor no soporta esta versión, entonces el proveedor LDAP intenta
comunicar usando la versión 2. El proveedor LDAP maneja automáticamente la selección, por
eso no es necesario que el cliente especifique que versión particular quiere usar.
Sólo en unas pocas circunstancias podriamos querer especificar una versión de protocolo
explícitamente. Una es que el servidor LDAP con el que queremos comunirar falle al indicar
que no soporta la versión 3. Algunos servidores públicos exhiben este comportamiento, y
un intento de comunicar con ellos usando la versión 3 puede resultar en un cuelgue del
cliente (porque el servidor no soporta la versión) o en un error de protocolo (porque el
servidor responde con un codigo de error incorrecto). O, podríamos querer especificar
explícitamente la versión si queremos que nuestro programa utilice sólo esta versión y que
falle si el servidor contactado no la soporta. Por ejemplo, nuestro programa podría,
necesitar hacer actualizaciones en el esquema publicado del servidor; esto sólo tiene
sentido para la versión 3.
Para especificar la versión de protocolo, usamos la propiedad de entorno
"java.naming.ldap.version". Aquí tenemos un ejemplo que pide la versión 2 del
protocolo:
// Set up the environment for creating the initial context
Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
env.put("java.naming.ldap.version", "2");
// Create the initial context
DirContext ctx = new InitialDirContext(env);
// ... do something useful with ctx
Para pedir la versión 3, simplemente
reemplazamos el 2 con un 3, de esta forma:
env.put("java.naming.ldap.version", "3");