Hi Stefan, This is happening only in production system and we are unable to reproduce the issue in test system. Yes, we are still using the XMLPersistenceManager with clustering.
Jackrabbit version : 1.3.3 We want to delete the corrupt nodes from system. Please kindly advise. Best Regards, RK -----Original Message----- From: Stefan Guggisberg [mailto:[EMAIL PROTECTED] Sent: Thursday, March 20, 2008 7:25 PM To: [email protected] Subject: Re: javax.jcr.ReferentialIntegrityException - the node cannot be removed because it is still being referenced. hi On Tue, Mar 18, 2008 at 10:51 AM, Pamarthi, Ramakrishna <[EMAIL PROTECTED]> wrote: > Dear All, > > We are getting the following error. Any idea? i couldn't spot anything obviously wrong in your code sample. does the problem occur with a specific node only? if yes then my first bet would be a corrupt repository... are you still using XMLPersistenceManager? if the problem's reproduceable please create jira issue, if possible provide a simple test case (or at least detailed instructions how to reproduce the problem with an out-of-the-box jackrabbit) and detailed information about your environment, jackrabbit version and configuration. cheers stefan > > at org.apache.catalina.core.StandardEngineValve.invoke(Unknown Source) > at org.apache.catalina.connector.CoyoteAdapter.service(Unknown Source) > at org.apache.jk.server.JkCoyoteHandler.invoke(Unknown Source) > at org.apache.jk.common.HandlerRequest.invoke(Unknown Source) > at org.apache.jk.common.ChannelSocket.invoke(Unknown Source) > at org.apache.jk.common.ChannelSocket.processConnection(Unknown > Source) > at org.apache.jk.common.SocketConnection.runIt(Unknown Source) > at > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(Unknown Source) > at java.lang.Thread.run(Thread.java:595) > Caused by: com.hp.ocs.content.InvalidContentException: Cannot save the node > [id=?none(node not saved yet)?, > path=/ocs:repository/ocs:content/it_VA/newsTopic]. > at > com.hp.ocs.content.NodeManager.handleRepositoryException(NodeManager.java:931) > at com.hp.ocs.content.NodeManager.saveNode(NodeManager.java:60) > at com.hp.ocs.content.ContentBase.remove(ContentBase.java:182) > ... 41 more > Caused by: javax.jcr.ReferentialIntegrityException: > e913439f-60a3-40cb-bc4d-b4fec3c25156: the node cannot be removed because it > is still being referenced. > at > org.apache.jackrabbit.core.state.SharedItemStateManager.checkReferentialIntegrity(SharedItemStateManager.java:1400) > at > org.apache.jackrabbit.core.state.SharedItemStateManager$Update.begin(SharedItemStateManager.java:556) > at > org.apache.jackrabbit.core.state.SharedItemStateManager.beginUpdate(SharedItemStateManager.java:825) > at > org.apache.jackrabbit.core.state.SharedItemStateManager.update(SharedItemStateManager.java:855) > at > org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:326) > at > org.apache.jackrabbit.core.state.XAItemStateManager.update(XAItemStateManager.java:313) > at > org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:302) > at > org.apache.jackrabbit.core.state.SessionItemStateManager.update(SessionItemStateManager.java:306) > at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1240) > at > com.hp.ocs.content.NodeManager.saveNode(NodeManager.java:55) > > > Here are the functions: > > public void remove() throws InvalidContentException { > try { > Node parentNode = NodeManager.getParentNode(node); > NodeManager.removeNode(node); > NodeManager.saveNode(parentNode); > } catch (InvalidContentException e) { > throw new InvalidContentException(MessageFormat.format( > "Cannot remove the node", > new Object[] { node }), e); > } > } > > public static void removeNode(Node node) throws InvalidContentException { > try { > synchronized (ContentUtils.JCR_WRITE_LOCK) { > removeReferences(node); > node.remove(); > } > } catch (RepositoryException e) { > Object[] params = {toString(node)}; > String msg = MessageFormat > .format("Cannot remove node {0}.", > params); > handleRepositoryException(msg, e, true); > } > } > > private static void removeReferences(Node node) > throws InvalidContentException, RepositoryException { > PropertyIterator iter = node.getReferences(); > String uuid = node.getUUID(); > while (iter.hasNext()) { > Property ref = iter.nextProperty(); > Value[] values = ref.getValues(); > for (int i = 0; i < values.length; i++) { > if (StringUtils.equals(uuid, > values[i].getString())) { > values[i] = null; > } > } > Node parent = ref.getParent(); > setValues(parent, ref.getName(), values); > saveNode(parent); > } > } > > > Best Regards, > RK >
