/**
  * Binds a new name to the object bound to an old name, and unbinds the old name. Both names are
  * relative to this context. Any attributes associated with the old name become associated with
  * the new name. Intermediate contexts of the old name are not changed.
  *
  * @param oldName the name of the existing binding; may not be empty
  * @param newName the name of the new binding; may not be empty
  * @exception NameAlreadyBoundException if newName is already bound
  * @exception NamingException if a naming exception is encountered
  */
 @Override
 public void rename(Name oldName, Name newName) throws NamingException {
   Object value = lookup(oldName);
   bind(newName, value);
   unbind(oldName);
 }
 /**
  * Unbinds the named object.
  *
  * @param name the name to bind; may not be empty
  * @exception NameNotFoundException if an intermediate context does not exist
  * @exception NamingException if a naming exception is encountered
  */
 @Override
 public void unbind(String name) throws NamingException {
   unbind(new CompositeName(name));
 }