docs: @FFDCIgnore(ClassCastException.class)
      void autoBind(WSName subname, Object obj) throws InvalidNameException, NotContextException, NameAlreadyBoundException {
          ContextNode target = this, parent = this;
          int i = 0;
          try {
              for (/* int i = 0 */; i < subname.size() - 1; i++) {
                  String elem = subname.get(i);
                  target = (ContextNode) target.children.get(elem);
                  // create an auto-deleteable subcontext
                  if (target == null) {
                      target = new ContextNode(parent, elem, true);
                      Object existingEntry = parent.children.putIfAbsent(elem, target);
                      if (existingEntry != null) {
                          // another thread just beat me to it creating this entry
                          // assume it is a context and continue
                          target = (ContextNode) existingEntry;
                      }
                  }
                  parent = target;
              }
          } catch (ClassCastException e) {
              throw new NotContextException("" + fullName.plus(subname.getPrefix(i + 1)));
          }
          // allow multiple entries during invocation by JndiServiceBinder
          boolean replaced = false;
          String lastName = subname.getLast();
          AutoBindNode abNode = new AutoBindNode(obj);
          while (!replaced) {
              Object oldObj = target.children.putIfAbsent(lastName, abNode);
              if (oldObj != null) {
                  if (oldObj instanceof AutoBindNode) {
                      abNode = (AutoBindNode) oldObj;
                      // This synch ensures that addition of entries to an 
                      // AutoBindNode does not take place during removal of 
                      // the same AutoBindNode.
                      synchronized (abNode) {
                          abNode.addLastEntry(obj);
                          // This is a no-op in the normal case, but if we're racing an unbind, 
                          // we might need to modify a different AutoBindNode
                          replaced = target.children.replace(lastName, oldObj, abNode);
                      }
                  } else {
                      throw new NameAlreadyBoundException("" + fullName.plus(lastName));
                  }
              } else {
                  replaced = true;
              }
          }
      }