Previous | Next | Trail Map | Building a Service Provider | Adding Federation Support

The Next Naming System

Once you have done the processing for the current naming system, as described in the previous section, very little work is left to be done to complete the operation.

Here is a sample implementation of bind()(in the API reference documentation) from the previous section.

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);
    }
}
Evaluating the code with the try clause can result in any of three outcomes. You handle the last outcome by attempting to find a continuation context, by using NamingManager.getContinuationContext()(in the API reference documentation) or DirectoryManager.getContinuationDirContext()(in the API reference documentation), based on information in the CannotProceedException. You then proceed to invoke the same method on the continuation context by using the remaining name.

The approach described here is based heavily on throwing and catching a CannotProceedException. However, it is not the only approach. You could achieve the same results by using an iterative approach.


Previous | Next | Trail Map | Building a Service Provider | Adding Federation Support