En esta página: El Sistema de Nombres Siguiente 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:
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.
|