Do you have more info about that?
(not disputing, just curious)

Not that much :) But with heavy concurrent reads I ran into a problem
from time to time and I asked the Jackrabbit developers about it. And
they confirmed that this "might happen" and they discourage all
concurrent usage. This was roughly eight months ago

There was an effort to make read access to sessions thread save about a year ago [1]. So concurrent read access should be fine with Jackrabbit. Otherwise it is a bug and should be reported.

Michael

[1] https://issues.apache.org/jira/browse/JCR-890



Regards
Carsten


-Bertrand


2011/9/29 Bertrand Delacretaz<[email protected]>:
Hi,

On Thu, Sep 29, 2011 at 2:09 PM, Markus Joschko
<[email protected]>  wrote:
I want to get some assumptions of mine clarified regarding the usage
of classes like Session and ResourceResolver in event handlers.

1. The jackrabbit session is not threadsafe
2. ResourceResolvers are not threadsafe
3. Event services (EventHandler, JobProcessor,
javax.jcr.observation.Eventlistener) can be called concurrently

All true AFAIK, ResourceResolvers are probably threadsafe by
themselves but use JCR sessions which are not.

Actually, reading from sessions from multiple threads is safe, it's
writing concurrently that's not ok.


->  Sessions and Resolvers should not be stored as instance members but
opened and closed in the in the process/handleEvent methods.

If you're reading only you can use a session concurrently.
If you're writing rarely you can synchronize on the session object
when writing for example.


If this is true, how expensive is the creation of a session? I read in
a blog, that the creation is considered expensive and wonder if it
makes more sense
to create the session new every time (and we have quite a lot of
events processed by the handlers), or to synchronize access to an
instance session?

Jackrabbit session creation is cheap, the idea is that you can create
a session on every HTTP request for example.

IMO synchronizing might cause more performance and latency issues as
creating new sessions as needed, but it depends on your usage patterns
I guess. I'd start with whatever feels right and measure response
times as needed.

-Bertrand




--
Carsten Ziegeler
[email protected]





Reply via email to