Thanks Ard. Yes, I had seen it, and it was helpful. I very much appreciate
David's attempts to get the ball rolling on it. Unfortunately, it's probably
only the tip of an iceberg and I didn't see anything that helped me with my
particular interests. 


Ard Schrijvers wrote:
> 
> Not sure wether this is too abstract for you, but you might want to take a
> look over here:
> 
> http://wiki.apache.org/jackrabbit/DavidsModel
> 
> Regards Ard
> 
> 
> 
> I thought I would augment my question with a (simplified) example of what
> I'm
> trying to do. Starting with a very basic approach:
> 
> Node root = session.getRootNode();
> Node album = root.getNode("MyAlbum");
> Node songs = album.getNode("songs");
> Node song = songs.addNode("MySong");
> song.setProperty("genre", "funky");
> session.save();
> 
> I've expanded this into a richer object model:
> 
> public class Album{
> 
>       public static void main(){
>       
>               Session session = null;
>       
>               try{
>                       session = Repository.login();
>                       Node root = session.getRootNode();
>                       
>                       Album myAlbum = new Album(root.getNode("MyAlbum"));
>                       Song mySong = album.addSong("MySong");
>                       mySong.setGenre("funky");
>                       myAlbum.save();
>               }
>               catch(Exception e){
>                       System.err.println(e.getMessage());
>               }
>               finally{
>                       if(session != null)
>                               session.logout();
>               }
>       }
> }
> 
> 
> class Album{
> 
>       private Node _album;
>       
>       public Album(Node album){
>               _album = album;
>       }
>       
>       public String getName(){
>               Property name = _album.getProperty("name");
>               return name.getString();
>       }
>       
>       public Song addSong(String name){
>               Node songs = _album.getNode("songs");
>               Node song = songs.addNode(name);
>               return new Song(song);
>       }
>       
>       public void save(){
>               _album.save();
>       }
> }
> 
> class Song{
>       private Node _song;
>       
>       public Song(Node song){
>               _song = song;
>       }
>       
>       public void setGenre(String genre){
>               _song.setProperty("genre", genre);
>       }
> }
> 
> What are your thoughts? Am I doing anything that might cause issues as
> things get more complex? I'm new to the concept of JCR, so I'm very
> interested in learning how I can use it in my code as naturally as
> possible. 
> 
> Personally, I feel the "addSong" method is a little awkward, but I don't
> really see another way to do it. Also, how long should sessions live? With
> relational databases, best practice is to open and close the connection as
> quickly as possible. However, it seems like JCR sessions can/should stay
> open much longer. Any thoughts/tips/examples are very much appreciated!
> 
> 
> 
> loproman wrote:
>> 
>> Hi,
>> 
>> Does anyone know if there has been any research or documentation
>> developed
>> on best practices working with repositories?  Specifically, I'm wondering
>> if there are any ideal patterns out there for working with the JCR API.
>> I've seen lots of primitive examples where nodes are accessed directly
>> via
>> "getNode" and "addNode" etc. However, I think a more scalable solution
>> would need to wrap nodes with domain logic (similar to how DTO objects
>> are
>> used with a relational database I suspect). Thanks!
>> 
> 
> -- 
> View this message in context:
> http://www.nabble.com/Jackrabbit-Best-Practices-Design-Patterns-tf4762615.html#a13624765
> Sent from the Jackrabbit - Users mailing list archive at Nabble.com.
> 
> 
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Jackrabbit-Best-Practices-Design-Patterns-tf4762615.html#a13636511
Sent from the Jackrabbit - Users mailing list archive at Nabble.com.

Reply via email to