Excepciones de Nombrado
Muchos métodos de los paquetes JNDI lanzan una NamingException
cuando necesitan indicar que la operación solicitada no se ha realizado.
Normalmente, usaremos un bloque try/catch para envolver los
métodos que lanzan NamingException.
try {
Context ctx = new InitialContext();
Object obj = ctx.lookup("somename");
} catch (NamingException e) {
// Handle the error
System.err.println(e);
}
Árbol de Clases Exception
El JNDI tiene un rico árbol de excepciones que nace de la clase NamingException.
Los nombres de las clases de las excepciones son auto-explicativos y los veremos
más abajo. Para manejar una subclase particular de NamingException,
capturamos la clase de forma separada. Por ejemplo el siguiente código trata
especialmente a AuthenticationException y sus subclases.
try {
Context ctx = new InitialContext();
Object obj = ctx.lookup("somename");
} catch (AuthenticationException e) {
// attempt to reacquire the authentication information
...
} catch (NamingException e) {
// Handle the error
System.err.println(e);
}
Enumeraciones
Operaciones como Context.list()
y DirContext.search()
devuelven una NamingEnumeration
. En estos casos, si ocurre un error y no se devuelve ningún resultado,
se lanzará NamingException o una de sus subclases apropipadas
en el momento en que se llame al método. Si ocurre un error pero hay algunos
resultados para devolver, se devuelve una NamingEnumeration para
que podamos obtener dichos resultados. Cuando todos los resultados se han
acabado, llamar a NamingEnumeration.hasMore()
causará que se una lance una NamingException (o una de sus
subclases) para indicar el error. En este punto, la enumeración ya no es
válida y no se puede llamar a más métodos sobre ella.
Por ejemplo, si realizamos una search() y especificamos un
contador límite (n) de cuántas respuestas devolver, el search()
devolverá una enumeración consitente en como máximo n resultados. Si
el número de resultados excede de n, cuando se llame a NamingEnumeration.hasMore()
la vez n+1, se lanzará una SizeLimitExceededException.
Puedes ver la explicación sobre el contador límite en esta sección para ver un ejemplo.
Ejemplos en este Tutorial
En el código de ejemplo en línea que está dentro de este tutorial,
normalmente se omiten las clausulas try/catch para una mejor
lectura. Normalmente, como aquí sólo se meustran fragmentos de código, sólo
se incluyen las líneas que ilustran directamente el concepto. Veremos los
bloques try/catch apropiados para NamingException
si miramos los ficheros fuentes que acompañan este tutorial.
Excepciones en el Paquete javax.naming
Aquí tenemos las direcciones en el API de Sun de las excepciones contenidas en
el paquete javax.naming:
Aquí tenemos las direcciones en el API de Sun de las excepciones contenidas en
el paquete javax.naming.directory.
Aquí tenemos las direcciones en el API de Sun de las excepciones contenidas en
el paquete javax.naming.directory: