void unregisterNewNode(JCRNodeWrapper node) {
   if (!newNodes.isEmpty()) {
     newNodes.remove(node.getPath());
     try {
       if (node.hasNodes()) {
         NodeIterator it = node.getNodes();
         while (it.hasNext()) {
           unregisterNewNode((JCRNodeWrapper) it.next());
         }
       }
     } catch (RepositoryException e) {
       logger.warn("Error unregistering new nodes", e);
     }
   }
 }
 public void removeItem(String absPath)
     throws VersionException, LockException, ConstraintViolationException, AccessDeniedException,
         RepositoryException {
   JCRItemWrapper item = getItem(absPath);
   boolean flushNeeded = false;
   if (item.isNode()) {
     JCRNodeWrapper node = (JCRNodeWrapper) item;
     unregisterNewNode(node);
     if (node.hasNodes()) {
       flushNeeded = true;
     }
   }
   item.remove();
   if (flushNeeded) {
     flushCaches();
   } else {
     removeFromCache(item);
   }
 }