En esta página: Listar un Contexto En lugar de obtener un sólo objeto, como con Context.lookup(), podemos listar un contexto completo usando una sola operación. Hay dos métodos para listar un contexto: uno que devuelve las uniones y otro que sólo devuelve las parejas de nombres de clases nombre-a-objeto. El Método Context.List() Context.list() devuelve una enumeración de NameClassPair. Cada NameClassPair consiste en el nombre del objeto y el nombre de la clase. El siguiente fragmento de código lista los contenidos del directorio "awt" (es decir, los ficheros encontrados en el directorio "awt"). NamingEnumeration list = ctx.list("awt"); while (list.hasMore()) { NameClassPair nc = (NameClassPair)list.next(); System.out.println(nc); } El ejecutar este ejemplo obtendremos la siguiente salida. # java List accessibility: javax.naming.Context color: javax.naming.Context datatransfer: javax.naming.Context dnd: javax.naming.Context event: javax.naming.Context font: javax.naming.Context geom: javax.naming.Context im: javax.naming.Context image: javax.naming.Context peer: javax.naming.Context print: javax.naming.Context swing: javax.naming.Context El Método Context.listBindings() Context.listBindings() devuelve una enumeración de Binding. Binding es una subclase de NameClassPair. Una binding (unión) no sólo contiene el nombre del objeto y el nombre de su clase, también contiene el propio objeto. El siguiente código enumera el contexto "awt", imprimiendo cada nombre de unión y el objeto. NamingEnumeration bindings = ctx.listBindings("awt"); while (bindings.hasMore()) { Binding bd = (Binding)bindings.next(); System.out.println(bd.getName() + ": " + bd.getObject()); } Al ejecutar este ejemplo obtendremos una salida como esta. # java ListBindings accessibility: com.sun.jndi.fscontext.RefFSContext@1dacd52e color: com.sun.jndi.fscontext.RefFSContext@1dacd551 datatransfer: com.sun.jndi.fscontext.RefFSContext@1dacd584 dnd: com.sun.jndi.fscontext.RefFSContext@1dacd5b6 event: com.sun.jndi.fscontext.RefFSContext@1dacd5e8 font: com.sun.jndi.fscontext.RefFSContext@1dacd61b geom: com.sun.jndi.fscontext.RefFSContext@1dacd64d im: com.sun.jndi.fscontext.RefFSContext@1dacd62a image: com.sun.jndi.fscontext.RefFSContext@1dacd65c peer: com.sun.jndi.fscontext.RefFSContext@1dacd68f print: com.sun.jndi.fscontext.RefFSContext@1dacd6c1 swing: com.sun.jndi.fscontext.RefFSContext@1dacd6f3 Terminando una NamingEnumeration Una NamingEnumeration puede terminarse de una de tres formas: naturalmente, explícitamente o inexperadamente.
Sin importar el modo en que se ha terminado una enumeración, una vez terminada no se puede volver a usar. Llamar a un método sobre una enumeración terminada nos dará resultados indefinidos. ¿Por qué dos métodos de listado diferentes? list() se ha pensado para una aplicación estilo navegador que sólo quiere nombrar los nombres de los objetos de un contexto. Por ejemplo, un navegador podria listar los nombres de un contexto y esperar a que el usuario seleccione uno o unos pocos de los nombres mostrados para realizar operaciones futuras. Dichas aplicaciones normalmente no necesitan acceder a todos los objetos de un contexto. listBindings() se ha pensado para aplicaciones que necesitan realizar operaciones en masa sobre los objetos de un contexto. Por ejemplo, una aplicación de backup podría necesitar realizar operaciones de "estado de fichero" sobre todos los ficheros de un directorio. O un programa administrador de impresoras podría querer rearrancar todas las impresoras de un edificio. Para realizar dichas operaciones, estas aplicaciones necesitan obtener todos los objetos unidos en el contexto. Por eso es mucho más expeditivo devolver los objetos como parte de la enumeración. Qué aplicación puede usar list() o la potencialmente más costosa listBindings(), depende del tipo de información que se necesite.
|