Sistema de Nombrado en Java (JNDI) y II

La lecci�n Federaci�n describe como determina un proveedor de servicio qu� componentes de un nombre mixto debe procesar y cuales pasar. La lecci�n Los Componentes Esenciales contiene dos ejemplos de c�mo una implementaci�n de contexto selecciona componentes del nombre de entrada para procesarlos. Estos ejemplos conciernen a las implementaciones de contexto en que soportan separaci�n fuerte y por lo tanto seleccionan el primer componente de un nombre mixto.

Para soportar separaci�n d�bil, necesitamos reescribir el m�todo de utilidad getMyComponents() y todos los m�todos del contexto para eliminar la presunci�n de componente simple. Abajo tenemos un m�todo m�s general que, dado un nombre compuesto o mixto devuelve un array de dos elementos. En ese array, el primer componente contiene los componentes a procesar por el sistema de nombres actual y el segundo componente contiene los componentes a procesar por los sistemas de nombres siguientes. Este ejemplo maneja separaci�n fuerte:

protected Name[] parseComponents(Name name) throws NamingException {
    Name head, tail;
    if (name instanceof CompositeName) {
        int separator;
        // If there is no name to parse, or 
	// if you're already at the boundary
        if (name.isEmpty() ||  name.get(0).equals("")) {
    	    separator = 0;
        } else {
	    separator = 1;
        }

	head = name.getPrefix(separator);
	tail = name.getSuffix(separator);
    } else {
	// Treat this like a compound name
	head = new CompositeName().add(name.toString());
	tail = null;
    }

    return new Name[]{head, tail};
}

Abajo tenemos el mismo m�todo reescrito para soportar separaci�n d�bil. Para esta implementaci�n de contexto particular, s�lo se seleccionan los primeros componentes que contenga el caracter igual ("=") para ser procesados por el sistema de nombres actual:

protected Name[] parseComponents(Name name) throws NamingException {
    Name head, tail;
    if (name instanceof CompositeName) {
        int separator;
        // If there is no name to parse, or 
	// if you're already at the boundary
        if (name.isEmpty() ||  name.get(0).equals("")) {
	    separator = 0;
        } else {
	    // Find the leading components that have "="
	    int total = name.size();
	    int i;
	    for (i = 0; i < total; i++) {
	        if (name.get(i).indexOf('=') < 0) {
		    break;
	        }
	    }
	    separator = i;
        }

	head = name.getPrefix(separator);
	tail = name.getSuffix(separator);
    } else {
	// Treat this like a compound name
	head = new CompositeName().add(name.toString());
	tail = null;
    }

    return new Name[]{head, tail};
}

Si la implementaci�n de contexto soporta separaci�n d�bil din�mica (es decir, determina din�micamente los l�mites del sistema de nombres), parseComponents() devolver� todos los componentes como pertenecientes al sistema de nombres actual. Aqu� tenemos un ejemplo:

protected Name[] parseComponents(Name name) throws NamingException {
    Name head, tail;
    if (name instanceof CompositeName) {
        int separator;
        // If there is no name to parse, or 
	// if you're already at the boundary
        if (name.isEmpty() ||  name.get(0).equals("")) {
	    separator = 0;
        } else {
	    // All components are eligible
	    separator = name.size();
        }

	head = name.getPrefix(separator);
	tail = name.getSuffix(separator);
    } else {
	// Treat this like a compound name
	head = new CompositeName().add(name.toString());
	tail = null;
    }

    return new Name[]{head, tail};
}

Una vez que hemos definido este m�todo, nuestros m�todos de contexto pueden usarlo para extraer los componentes. Aqu� tenemos un ejemplo:

Name[] nm = parseComponents(name);
Name mine = nm[0];
Name rest = nm[1];

COMPARTE ESTE ARTÍCULO

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