IIRC There are 2 causes for this, one common , one rare.
The common one is 2 sessions concurrently modifying the same property
on a node at the same time causing one of the nodes to fail to save
the result. For example adding a value to a multi-valued property or
frequently by adding one or more child nodes to the same parent node
from multiple sessions.
The rare situation, which can be caused by a poorly implemented
AccessManager that modifies the state of the item cache whilst check
for a permission. If you havent done anything complex in a custom
access manager, then it wont be this one.
Looking at your stack trace I am going to guess its the former. Looks
like you might be modifying something on / which has a high
probability of producing an unmergable modification with another
session.
HTH
Ian
On 11 Jun 2009, at 16:39, reetesh chauhan wrote:
Hi,
We are using Jackrabbit 1.5.0 with Solaris OS, JDK 1.5 environment.
My code is running in Production for past 3 months but today I got
this
InvalidItemStateException while saving as pdf file in the repository
(Log
attached below).
Though, my document got saved in the repository, but still the
exception
came.
Not sure whether this happened because of concorrent sessions or
what, i
need to know the reason for this exception so that we can avoid this
to
happen in future and avoid probable loss of Document.
Any one having any suggestions on this please?
Here's the error:
gov.ms.mdes.access.framework.exception.BaseRunTimeException: null
Inner Exception :javax.jcr.InvalidItemStateException:Item cannot be
saved
because it has beenmodified externally: node /
at
gov
.ms
.mdes
.access
.framework
.exception
.BaseRunTimeException.wrapAndThrow(BaseRunTimeException.java:138)
at
gov
.ms
.mdes.access.framework.dms.DmsDataTemplate.save(DmsDataTemplate.java:
81)
at
gov.ms.mdes.access.framework.dms.BaseDmsDAO.save(BaseDmsDAO.java:40)
at
gov
.ms
.mdes
.access
.batch
.op
.BatchRepaymentDistributionBalancingReport
.performBusinessProcess
(BatchRepaymentDistributionBalancingReport.java:75)
at
gov
.ms
.mdes.access.batch.framework.BatchManager.runBatch(BatchManager.java:
219)
at
gov
.ms
.mdes
.access
.batch
.framework
.scheduling.impl.quartz.job.CustomJob.executeBatch(CustomJob.java:83)
at
gov
.ms
.mdes
.access.batch.framework.scheduling.impl.quartz.job.CustomJob.access
$000(CustomJob.java:25)
at
gov
.ms.mdes.access.batch.framework.scheduling.impl.quartz.job.CustomJob
$BatchThread.run(CustomJob.java:160)
Caused by: javax.jcr.InvalidItemStateException: Item cannot be saved
because
it has beenmodified externally: node /
at
org
.apache
.jackrabbit
.rmi.server.ServerObject.getRepositoryException(ServerObject.java:104)
at
org
.apache.jackrabbit.rmi.server.ServerSession.save(ServerSession.java:
212)
at sun.reflect.GeneratedMethodAccessor5639.invoke(Unknown
Source)
at
sun
.reflect
.DelegatingMethodAccessorImpl
.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:
466)
at
sun.rmi.transport.tcp.TCPTransport
$ConnectionHandler.run(TCPTransport.java:707)
at java.lang.Thread.run(Thread.java:595)
at
sun
.rmi
.transport
.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:
247)
at
sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:
223)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)
at
org.apache.jackrabbit.rmi.server.ServerXASession_Stub.save(Unknown
Source)
at
org
.apache.jackrabbit.rmi.client.ClientSession.save(ClientSession.java:
208)
at
gov
.ms
.mdes.access.framework.dms.DmsDataTemplate.save(DmsDataTemplate.java:
77)
... 6 more
Inner Exception:
javax.jcr.InvalidItemStateException: Item cannot be saved because it
has
beenmodified externally: node /
at
org
.apache
.jackrabbit
.rmi.server.ServerObject.getRepositoryException(ServerObject.java:104)
at
org
.apache.jackrabbit.rmi.server.ServerSession.save(ServerSession.java:
212)
at sun.reflect.GeneratedMethodAccessor5639.invoke(Unknown
Source)
at
sun
.reflect
.DelegatingMethodAccessorImpl
.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:
466)
at
sun.rmi.transport.tcp.TCPTransport
$ConnectionHandler.run(TCPTransport.java:707)
at java.lang.Thread.run(Thread.java:595)
at
sun
.rmi
.transport
.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:
247)
at
sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:
223)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)
at
org.apache.jackrabbit.rmi.server.ServerXASession_Stub.save(Unknown
Source)
at
org
.apache.jackrabbit.rmi.client.ClientSession.save(ClientSession.java:
208)
at
gov
.ms
.mdes.access.framework.dms.DmsDataTemplate.save(DmsDataTemplate.java:
77)
at
gov.ms.mdes.access.framework.dms.BaseDmsDAO.save(BaseDmsDAO.java:40)
at
gov
.ms
.mdes
.access
.batch
.op
.BatchRepaymentDistributionBalancingReport
.performBusinessProcess
(BatchRepaymentDistributionBalancingReport.java:75)
at
gov
.ms
.mdes.access.batch.framework.BatchManager.runBatch(BatchManager.java:
219)
at
gov
.ms
.mdes
.access
.batch
.framework
.scheduling.impl.quartz.job.CustomJob.executeBatch(CustomJob.java:83)
at
gov
.ms
.mdes
.access.batch.framework.scheduling.impl.quartz.job.CustomJob.access
$000(CustomJob.java:25)
at
gov
.ms.mdes.access.batch.framework.scheduling.impl.quartz.job.CustomJob
$BatchThread.run(CustomJob.java:160)