Una vez que hemos procesado el sistema de nombres actual, como se describi� en la p�gina anterior, nos queda muy poco trabajo por hacer para completar la operaci�n.
Aqu� tenemos una implementaci�n de ejemplo del m�todo bind() de la secci�n anterior:
public void bind(Name name, Object bindObj) throws NamingException {
try {
Name[] nm = parseComponents(name);
Name mine = nm[0];
Name rest = nm[1];
if (rest == null || rest.isEmpty()) {
// Terminal; just use head
bind_internal(mine, bindObj);
} else if (rest.get(0).equals("") && rest.size() == 1) {
// Terminal nns
bind_nns(mine, bindObj);
} else if (mine.isEmpty() || isAllEmpty(rest)) {
// Intermediate; resolve current components as intermediate
Object obj = lookup_nns(mine);
// Skip the leading forward slash
throw fillInCPE(obj, mine, rest.getSuffix(1));
} else {
// Intermediate; resolve current components as intermediate
Object obj = resolveIntermediate_nns(mine, rest);
throw fillInCPE(obj, mine, rest);
}
} catch (CannotProceedException e) {
Context cctx = NamingManager.getContinuationContext(e);
cctx.bind(e.getRemainingName(), bindObj);
}
}
Evaluando el c�digo con la cla�sula try puede ocurrir cualquiera de estas tres salidas:
- La operaci�n se completa con �xito.
- La operaci�n resulta en un error y lanza una NamingException.
- La operaci�n necesita continuarse en el nns y lanza una CannotProceedException
Manejamos esta �ltima salida intentando encontrar un contexto de continuaci�n, usando NamingManager.getContinuationContext() o DirectoryManager.getContinuationDirContext(), bas�ndonos en la informaci�n de la CannotProceedException. Luego procedemos a llamar al mismo m�todo sobre el contexto de continuaci�n usando el nombre restante.
La aproximaci�n descrita aqu� est� fuertemente basada en lanzar y capturar una CannotProceedException. Sin embargo, no es la �nica aproximaci�n. Podr�amos conseguir el mismo resultado usando una aproximaci�n alternativa.