You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jackrabbit.apache.org by Korbinian Bachl - privat <ko...@whiskyworld.de> on 2009/02/25 19:30:24 UTC

some doubts after my first hops

Hi,

some time ago I had a look at Brix (wicket-cms) and stumbled over 
Jackrabbit and JCR. I had not much time till last weekend and decided 
then to fight my way through the Jackrabbit-Docs and wiki.

I think I understood much of it, however versioning as well as the right 
usage in production is not as clear as I hoped it would be.

I have an inhouse java app here (wicket based webapp with spring + jpa) 
that creates files and want to store them in a JCR so I can change my 
persitence based upon my needs. The files are recreated on a daily base 
and so I thought that versioning is the way to go. So I created a basic 
"saveFile" method:

public static void createVersionableFileNode(Node folderNode, File file, 
String fileName, String mimeType, String encoding, Session session)
             throws RepositoryException, IOException {

         Node fileNode;
         Node resNode;
         //create the file node
         try {
             fileNode = folderNode.getNode(fileName);
             log.info("FileNode {} existiert bereits; versioning...", 
file.getName());
         }
         catch (PathNotFoundException e) {
             fileNode = folderNode.addNode(fileName, JcrConstants.NT_FILE);
             log.info("FileNode {} existiert nicht; creation...", 
file.getName());
             fileNode.addMixin(JcrConstants.MIX_VERSIONABLE);
         }

         //same for resNode
         try {
             resNode = fileNode.getNode(JcrConstants.JCR_CONTENT);
             log.info("ResNode existiert bereits");
         }
         catch (PathNotFoundException e) {
             resNode = fileNode.addNode(JcrConstants.JCR_CONTENT, 
JcrConstants.NT_RESOURCE);
             log.info("ResNode wurde erstellt");
         }

         fileNode.checkout();

         //create the mandatory filecontent-child node
         resNode.setProperty(JcrConstants.JCR_MIMETYPE, mimeType);
         resNode.setProperty(JcrConstants.JCR_ENCODING, encoding);
         resNode.setProperty(JcrConstants.JCR_DATA, new 
FileInputStream(file));
         Calendar lastModified = Calendar.getInstance();
         lastModified.setTimeInMillis(file.lastModified());
         resNode.setProperty(JcrConstants.JCR_LASTMODIFIED, lastModified);

         session.save();
         fileNode.checkin();
     }

In test all works perfect, but what worries me at the moment is following:

-> Why do I have to do soo much work for just saving a file? Did I miss 
an easier approach?

-> In the Jackrabbit-Doc i haven't found a word about versioning and its 
behaviours of childs (neither in the JCR spec) - so how will a 
parent-Node that is versioned react when
a, a versioned child changes?
b, a non-versioned child changes?

-> I saw that there is also an OCM; When should one use it and when not? 
Would my file-scenario make sense to take usage of the OCM?

Best,

Korbinian