Heya, I think I'm probably doing something pretty stupid here, but I'm
having a few problems using Jackrabbit in a multithreaded environment.
If you can imagine I have this scenario:
Thread #1 running inside my unit test which is doing stuff to the
repository all in one session.
Thread #2 which is reading stuff inside the repository and updating some
nodes
I think occasionally these threads collide though and start modifying
the same node. Then I starting getting things like:
javax.jcr.RepositoryException: failed to create transient state: there's
already a property state instance with id
1d038015-6c48-4654-a685-1dcf57a6bf6f/{http://www.jcp.org/jcr/1.0}mixinTypes:
there's already a property state instance with id
1d038015-6c48-4654-a685-1dcf57a6bf6f/{http://www.jcp.org/jcr/1.0}mixinTypes
at
org.apache.jackrabbit.core.PropertyImpl.getOrCreateTransientItemState(PropertyImpl.java:97)
at
org.apache.jackrabbit.core.PropertyImpl.restoreTransient(PropertyImpl.java:143)
at
org.apache.jackrabbit.core.ItemImpl.restoreTransientItems(ItemImpl.java:734)
at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1233)
at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:849)
...
Caused by: org.apache.jackrabbit.core.state.ItemStateException: there's
already a property state instance with id
1d038015-6c48-4654-a685-1dcf57a6bf6f/{http://www.jcp.org/jcr/1.0}mixinTypes
at
org.apache.jackrabbit.core.state.SessionItemStateManager.createTransientPropertyState(SessionItemStateManager.java:629)
at
org.apache.jackrabbit.core.PropertyImpl.getOrCreateTransientItemState(PropertyImpl.java:90)
... 42 more
Or:
javax.jcr.RepositoryException: failed to create transient state: there's
already a property state instance with id
1d038015-6c48-4654-a685-1dcf57a6bf6f/{http://www.jcp.org/jcr/1.0}uuid:
there's already a property state instance with id
1d038015-6c48-4654-a685-1dcf57a6bf6f/{http://www.jcp.org/jcr/1.0}uuid
at
org.apache.jackrabbit.core.PropertyImpl.getOrCreateTransientItemState(PropertyImpl.java:97)
at
org.apache.jackrabbit.core.PropertyImpl.restoreTransient(PropertyImpl.java:143)
at
org.apache.jackrabbit.core.ItemImpl.restoreTransientItems(ItemImpl.java:734)
at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1233)
at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:849)
....
Caused by: org.apache.jackrabbit.core.state.ItemStateException: there's
already a property state instance with id
1d038015-6c48-4654-a685-1dcf57a6bf6f/{http://www.jcp.org/jcr/1.0}uuid
at
org.apache.jackrabbit.core.state.SessionItemStateManager.createTransientPropertyState(SessionItemStateManager.java:629)
at
org.apache.jackrabbit.core.PropertyImpl.getOrCreateTransientItemState(PropertyImpl.java:90)
... 42 more
If the second thread was accessing a node created by the first thread
and the node wasn't saved yet, would that explain these errors?
Any ideas how to avoid this???
- Dan
--
Dan Diephouse
MuleSource
http://mulesource.com | http://netzooid.com/blog