If you are really curious you can take a thread dump of your application or your Jackrabbit server ( kill -QUIT <process> ) and see where they are waiting.

I had a similar problem. Not sure about the real cause but my guess is that even (and especially) if you have different sessions, if the "save" requests are running in parallel Jackrabbit needs to check and make sure that they are not operating on the same nodes (and depending on the operation the same parents).

As I said I had a similar problem but in my situation I only had to rewrite different nodes with data cached in memory so I "solved" it by adding a worker thread, adding the request to a queue and freeing my main threads.