jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Lubos and Alena Pochman" <pochm...@gmail.com>
Subject Re: Cannot update previous version of nt:file node
Date Thu, 15 Mar 2007 17:59:29 GMT
Jukka, Tobias, and all.

you guys are the best "documentation" and I very much appreciate your help
and patience!
I found about the empty frozen node sentinel (the hard way from debugging
8-).
I found out what was wrong. When I created the first version of the
node/document, I did not check it in,
because I did not know I should do it. Even the example
http://www.artima.com/lejava/articles/contentrepository3.html
misses that. But then I downloaded the example source code and voila!

Anyway I now create the new versionable document like (see the
document.checkin() at the end):

        Node root = session.getRootNode();
        document = root.addNode(instanceName, "nt:file");
        document.addMixin("mix:versionable");  // Make document referencable
and versionable
        Node content = document.addNode("jcr:content", "nt:resource");
        content.setProperty("jcr:mimeType", "application/zip");
        content.setProperty("jcr:data", new
ByteArrayInputStream(zipContents));
        content.setProperty("jcr:lastModified", Calendar.getInstance());
        this.session.save();
        document.checkin();

And then iterate over versions like:

        Node document = this.session.getNodeByUUID(documentId);
        VersionHistory history = document.getVersionHistory();
        VersionIterator ito = history.getAllVersions();
        while (ito.hasNext()) {
           Version v = ito.nextVersion();
           //The version node will have a "frozen" child node that contains
           //the corresponding version's node data
           NodeIterator it = v.getNodes("jcr:frozenNode");
           if (it.hasNext()) {
             Node no = it.nextNode();
             if (no.hasNode("jcr:content"))
                ...
           }
        }

This seems to be working well, and the versions are sorted from current to
oldest.

Thanks to Tobias, you, and Frank Sommers for the help. Lubos


On 3/15/07, Jukka Zitting <jukka.zitting@gmail.com> wrote:
>
> Hi,
>
> On 3/15/07, Lubos and Alena Pochman <pochmans@gmail.com> wrote:
> > thanks for the response. My question is, why is the predecessor empty?
>
> When you create a mix:versionable node, an empty "root version" get's
> created in the version storage as a sentinel that acts as the
> predecessor of the first actual version that you checkin().
>
> > Didn't I created new version with the document.checkin(),
> document.checkout()?
> > The modification worked, when I retrieve the modified data by using the
> modified
> > document node directly, the new data are there. But where is the
> previous version?
> > When I repeat the process I still get only predecessors.length == 1. So
> I
> > must be doing something wrong in trying to create new version it the
> code:
> >
> >         document.checkout();
> >         Node content = (Node)document.getPrimaryItem();
> >         content.setProperty("jcr:data", new
> > ByteArrayInputStream(zipContents));
> >         content.setProperty("jcr:lastModified", Calendar.getInstance());
> >         this.session.save();
> >         document.checkin();
> >
> > It looks like I am updating the current node without creating a new
> version?
> > And why in this case predecessors.length == 1? Shouldn't it be 0?
>
> It depends on what you did before the document.checkout() call. If you
> just created the document node, then the results you describe are
> correct. The base version you get using document.getBaseVersion() is
> the one checked in with the document.checkin() call, and the one
> predecessor is the root version that got created when the versionable
> document node was first saved.
>
> You can create new versions of the document node and increase the
> predecessors list by repeating the document.checout() ...
> document.checkin() cycle.
>
> > To be honest, even after re-reading the JSR-170 spec several times on
> > versioning, it is hard for me to get my head around it. Is there any
> tutorial
> > and or book I can use to learn more about the versioning topic?
>
> I feel your pain. Unfortunately there isn't yet very much introductory
> material on JCR.
>
> PS. I will be giving a JCR tutorial in ApacheCon EU in early May, see
> http://www.eu.apachecon.com/ for the details. The tutorial materials
> will sooner or later after the ApacheCon find their way also onto the
> Jackrabbit web site.
>
> BR,
>
> Jukka Zitting
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message