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?
>
>
>

Reply via email to