Hi J,
I had already tried your approach with multiple workspaces. The problem with that is, I don't want a workspace for every user, since there might be a lot of users.
Do you have a lot of users that do reading and a few that actually modify something? Or do generally all users read and write?
If there are only few users (or even "Activities" for multiple users working together on a bigger "change set") that actually make modifications, then you may allow the users to start their "change project" as they begin making changes which would then result in the creation of a new fully populated workspace, which is used during the course of the modification until the changes are checked back in, which could also result in the disposal of the workspace. I guess architecturally it sounds like the cleanest solution would be to have something that we at some point of the specification called a "Dynamic Workspace" meaning that a dynamic workspace would be based on another workspace and from an implementation perspective would not incur the cost of actually duplicating the content. Since we found that this really is an implementation detail, we took it out of the JCR spec. So I guess, it would be up to the Jackrabbit implementation to be able to provide something like that, which I personally think would be fantastic. This almost sounds like a very clever "copy on write" implementation, with quite an impact on things like the search index, referential integrity and for the first time forcing "cross-workspace" dependencies. ...and that actually would be a good topic for the dev-list ;) regards, david