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

Sistema de Nombrado en Java (JNDI) y II
Autor: Sun
Traductor: Juan Antonio Palos (Ozito)


En esta página:


Crear una Federación

Creamos una federación de una de estas dos formas:

  • Mediante administración explícita
  • Mediante composición dinámica

En la primera forma, unimos explícitamente la referencia de un sistema de nombres dentro de un contexto de otro sistema de nombres. Por ejemplo, podríamos grabar información de referencia sobre el sistema de nombres LDAP departamental local dentro de un sistema DNS cuyas aplicaciones puedan resolver subsecuentemente un nombre mixto que contiene un nombre DNS y un nombre LDAP. En la última forma, tenemos la federación creada dinámicamente como la resolución de procesar un nombre mixto. Por ejemplo, un sistema de ficheros contiene diferentes tipos de ficheros. Algunos de esos ficheros podrían tener formato ZIP. Podemos crear una federación usando un nombre mixto que contenga el nombre del fichero y su entrada dentro del fichero ZIP. De esta forma, la federación se crea dinámicamente sin asistencia externa y puede modificarse según los tipos de ficheros y sus correspondientes proveedores de servicio.

Una unión explícita consta de un nombre y una referencia. Dependiendo del sistema de nombres al que está unida la referencia, la referencia real podría tener diferentes formas. Por ejemplo, un sistema de nombres LDAP departamental podría estar unido dentro de un DNS mediante un registro DNS SRV que contiene las direcciones IP y los DNs de los servidores LDAP. O, la referencia JNDI de un sistema de nombres de aplicación podría unirse a un sistema LDAP. También un sistema de nombres podría representarse de forma diferente en un sistema de nombres superior. Por ejemplo, el mismo sistema de nombres podría unirse usando diferentes datos en el DNS y en el LADP. Sin importar su formato de almacenamiento, una referencia se representa eventualmente de forma programática mediante un objeto Reference. La lección Objetos Java y el Directorio describe cómo se puede transformar una Reference desde y ha su representación real.

Desde la perspectiva de un desarrollador de proveedores de servicio es una buena idea definir una referencia para la implementación de contexto. Esto asegura a los usuarios del proveedor el uso de una referencia consistente cuando se refieran a contextos en la implementación y cuando unan contextos de la implementación dentro de sistemas de nombres externos.

Referencia

Una referencia de contexto debería contener los datos necesarios para crear un ejemplar Context. Si el contexto representa estado sobre un servidor de nombres o directorio, entonces su referencia debería como mínimo contener información sobre cómo contactar con el servidor y cómo identificar su estado dentro del servidor. Algunas veces esta tarea es complicada por el hecho de que el acceso al servidor podría está controlado y requerir autentificación. Te hemos advertido de no situar información sensible de seguridd como passwords dentro de una referencia. Mejor todavía, la referencia debería ser genérica y la información de autentificación del contexto ignorada.

Si el proveedor de servicio ya tiene una implementación de contexto URL y una factoría para la implementación de contexto, podremos influenciar en el diseño de la referencia de contexto. Por ejemplo, simplemente podemos hacer que la referencia contenga la URL(s) del contexto. Esto no sólo hace más consistente el acceso al contexto, sino que simplifica significativamente la implementación de la correspondiente factoría de objetos.

Factoría de Objetos

Una vez que hemos definido el formato de la referencia para nuestra implementación de contexto, podemos escribir una factoría de objetos para ella. Así, las aplicaciones podrán acceder a nuestra implementación de contexto mediante referencias en vez de nombres.

Abajo hay un ejemplo de una factoría de objetos escrita para usar la factoría de objetos URL de la misma implementación de contexto. Por ejemplo, supongamos que nuestra implementación de contexto soporta el esquema URL foo y que tiene la factoría de contexto URL tut.foo.fooURLContextFactory. La correspondiente factoría de objetos FooCtxFactory podría parecerse a esto:

public class FooCtxFactory implements ObjectFactory {
    public FooCtxFactory() {
    }

    public Object getObjectInstance(Object ref, Name name, Context nameCtx,
	Hashtable env) throws Exception {

	if ((ref instanceof Reference) &&
	    myClassName.equals(((Reference)ref).getFactoryClassName())) {
	    
	    // Create a URL context factory
	    ObjectFactory factory = new tut.foo.fooURLContextFactory();

	    // Extract the URL(s) from the Reference
	    String[] urls = getURLs((Reference)ref);

	    // Ask the URL context factory to process the URL(s)
	    return factory.getObjectInstance(urls, name, nameCtx, env);
	}

	// This is not meant for this factory
	return null;
    }
}

getURLs() es una utilidad que extrae el string URL desde la dirección de la referencia.

Referenciable

Para unir el contexto no es necesario una relación simétrica. Simplemente porque podamos buscar un contexto desde un sistema de nombres externo no significa necesariamente que podamos unir programáticamente (la referencia del) mismo contexto dentro de un sistema de nombres externo. La unión podría haber sido añadida administrativamente a través de herramientas específicas para ese sistema de nombres externo.

No importa, podemos planear el soporte para uniones programáticas haciendo que nuestra implementación de contexto sea referenceable. Para hacer esto, hacemos que la implementación implemente el interface Referenceable. También, proporcionamos una implementación para getReference(). Este método debería devolver una referencia que pueda ser alimentada a la factoría de objetos del proveedor.


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