Hi,

is it possible in Jackrabbit to have a transaction that spans multiple workspaces? What I would like to do is to start a UserTransaction, write changes to several Jackrabbit workspaces (all from the same repository) and a Hibernate session, and then commit all these changes together. My application modifies several workspaces concurrently, and I would like to ensure that all these changes are either commited or rolled back completely.

I have set up a JCA deployment of Jackrabbit 1.3.1 in JBoss , and it works fine as long as I only use one session per transaction. It looks from my tests like it is not possible to open more than one session within a transaction, and I also found a thread on the mailing list that says something like that.

But if I want to work in multiple workspaces, I have to open multiple sessions, because session are always per-workspace, right?

So my code to edit multiple workspaces within one transaction would be

                InitialContext ctx = new InitialContext();

UserTransaction utx = (UserTransaction)ctx.lookup("java:comp/ UserTransaction");
                utx.begin();

                Repository repo = (Repository)ctx.lookup("java:jcr/local");
Session session1 = repo.login(new SimpleCredentials("admin", "admin".toCharArray()), "workspace1"); Session session2 = repo.login(new SimpleCredentials("admin", "admin".toCharArray()), "workspace2");
                
                // Use session1 to write changes to workspace1
                
                // Use session2 to write changes to workspace2
                
                session1.save();
                session2.save();
                
                utx.commit();

which doesn't work.

Is there any way to include multiple workspaces within the scope of one transaction?


Thank you.

Jan

Reply via email to