jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marcel Reutegger <marcel.reuteg...@gmx.net>
Subject Re: Best practice for working with multiple sessions needed
Date Tue, 03 Oct 2006 18:38:58 GMT


Daniel Doubleday wrote:
> My application includes many use cases where it has to be able to add many
> 'n' in an 1-n relationship concurrently. Think of a blog where the the 1 is
> the blog entry folder and the n's are the entries. Many users will be adding
> entries at the same time. In an RDBM System that's no bi deal since the blog
> entry folder never has to be updated when a new entry is added.
> 
> With JCR the child node references are stored in the parent node. Thus the
> locking problem. I think that's simply the price of JCR and my app is not
> suitable.

imo a blog is the perfect application for JCR. it is inherently 
hierarchical if modeled carefully. Using a well designed hierarchy not 
just helps representing content on the web using URLs but also helps 
solving your concurrency problem. Unlike a RDBMs blog entries don't 
have to be stored in a flat table. Simply store them the way you 
usually access them: by their date

so, I would structure them the following way:

+ blogs
   + user1
     + 2006
       + 09
         + 24
           + f2f-at-almaden
       + 10
         + 03
           + jcr-is-great
   + user2
     + ...

and since nowadays we want to be restful those blogs are easily mapped 
to urls like:
http://www.jcrblog.org/user1/2006/10/03/jcr-is-great.html

moreover displaying the blogs written in september 2006 by user1 is as 
simple as iterating over the child nodes of /blogs/user1/2006/09. no 
need to run a query.

and finally your concurrency problem disappeared too. Unless the very 
unlikely case occurs that a user enters two blog entries at the same time.

IMO JCR is closer to a object oriented than a relational database, 
hence the data structure and the node types should be modeled with 
this in mind.

If you still have concurrent changes on a node you can use the utility 
class org.apache.jackrabbit.util.Locked, which helps you to 
synchronize access to a lockable node with just a couple of lines of code.

regards
  marcel

Mime
View raw message