I ended up walking resource myself: private void visit(Resource resource) { //actually do something.. like, adding to sitemap. }
public void walkBreathFirst(Resource resource) { final Queue<Resource> toVisit = new ConcurrentLinkedQueue<Resource>(); try { toVisit.add(resource); while (!toVisit.isEmpty()) { final Resource visitedResource = toVisit.remove(); visit(visitedResource); final Iterator<Resource> iter = visitedResource.listChildren(); while (iter.hasNext()) { toVisit.add(iter.next()); } } } catch (SitemapException e) { } } On Thu, Jun 16, 2011 at 9:47 AM, sam lee <skyn...@gmail.com> wrote: > Hey, > > I need to walk a large resource tree (for sitemap generation, for example). > > I'm aware of javax.jcr.ItemVisitor .. But I want to visit Resources > instead, not Nodes. > I could use ItemVisitor and elevate Nodes to Resources using > ResourceResolver: > > @Override > public void visit(Node node) throws RepositoryException { > resolver.getResource(node.getPath()); > } > > > Is there a better way? I want to implement void visit(Resource > resource); if possible. > > If I were to write my own ResourceVisitor, I would use recursion. But is > recursion safe for a large tree? > Looking at source code of javax.jcr.util.TraversingItemVisitor, it uses > simple recursion too (with a queue for breathfirst traversal). > > What is a recommended way of walking a large resource tree? > > >