jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tomasz Dabrowski" <Tomasz.Dabrow...@cognifide.com>
Subject Error during removing node
Date Tue, 06 Dec 2005 11:48:46 GMT

Hi,

I've been trying to play with latest CRX night build for a few days.
Unfortunately I found a strange result after trying to remove referenced
node. My test case
is as fallow:

1. Create my root node (MY_ROOT).
2. Add node (MY_NODE_0) below node created in step 1 (MY_ROOT).
3. Add one more node (MY_NODE_1) below node created in step 1
(MY_ROOT). In this node (MY_NODE_1) create reference property to node
from step 2 (MY_NODE_0).
4. Try to remove MY_NODE_0. It must fail as this node is referenced by
MY_NODE_1.
5. Try to remove MY_ROOT.

Everything should go ok, but on step 5 I get en exception:
javax.jcr.ItemNotFoundException

I attached my source togethet with empty repository (I created my
types: my:root and my:nood). All that you need, you have to define
path to repository.

<<<< DeleteTest.java >>>>>>>>>>
package com.prototyping.it5;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.jcr.Node;
import javax.jcr.ReferentialIntegrityException;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;

import org.apache.jackrabbit.core.RepositoryImpl;
import org.apache.jackrabbit.core.config.RepositoryConfig;

public class DeleteTest {
    private static final org.apache.commons.logging.Log log =
org.apache.commons.logging.LogFactory.getLog(DeleteTest.class);

    public static String REPOSITORY_HOME = "d:/repo_embeded/";

        public static String REPOSITORY_CONFIG = REPOSITORY_HOME +
"repository.xml";

    public static void main(String[] args) throws RepositoryException,
FileNotFoundException, IOException {
        System.setProperty("java.security.auth.login.config",
"jaas_jcr.config");

        log.info("Creating EmbeddedRepository.");
        RepositoryConfig config =
RepositoryConfig.create(REPOSITORY_CONFIG, REPOSITORY_HOME);
        Repository repository = RepositoryImpl.create(config);
        log.info("Created EmbeddedRepository successfully.");

        Session session = repository.login(new
SimpleCredentials("admin", "admin".toCharArray()));

        testRemovingReferences(session);

        session.logout();

        ((RepositoryImpl) repository).shutdown();

        log.info("Done.");
    }

    private static void testRemovingReferences(Session session) throws
RepositoryException {
        Node root = session.getRootNode();

        // create department node
        Node myRoot = root.addNode("myRoot", "my:root");
        root.save();
        myRoot.checkin();

        log.info("myRoot node created.");

        // create one more node below
        myRoot.checkout();
        Node myNode0 = myRoot.addNode("myNode0", "my:node");
        myRoot.save();
        myNode0.checkin();
        myRoot.checkin();

        log.info("myNode0 node created.");

        // create node with reference to myNode0
        myRoot.checkout();
        Node myNode1 = myRoot.addNode("myNode1", "my:node");
        myNode1.setProperty("my:reference", myNode0);
        myRoot.save();
        myNode1.checkin();
        myRoot.checkin();

        log.info("myNode1 node created.");

        // trying to remove myNode0. Must fail as myNode0 is referenced
by myNode1.
        try {
            myRoot.checkout();
            myNode0.remove();
            myRoot.save();
        }
        catch (ReferentialIntegrityException e) {
            log.info("Can not remove specialty primary");
        }
        finally {
            myRoot.checkin();
        }

        // try to remove department
        myRoot.remove();

        log.info("Subtree removed.");

    }

}

<<<< custom_nodetypes.xml >>>>>>>>
<?xml version="1.0" encoding="UTF-8"?>

<nodeTypes xmlns:fn="http://www.w3.org/2004/10/xpath-functions"
   xmlns:jcr="http://www.jcp.org/jcr/1.0"
   xmlns:mix="http://www.jcp.org/jcr/mix/1.0"
   xmlns:my="com.prototyping"
   xmlns:nt="http://www.jcp.org/jcr/nt/1.0" xmlns:rep="internal"
   xmlns:sv="http://www.jcp.org/jcr/sv/1.0"
   xmlns:xml="http://www.w3.org/XML/1998/namespace"
   xmlns:xs="http://www.w3.org/2001/XMLSchema">
   
   <!-- my:root -->
   <nodeType hasOrderableChildNodes="false" isMixin="false"
name="my:root"
      primaryItemName="">
      <supertypes>
         <supertype>nt:base</supertype>
         <supertype>mix:versionable</supertype>
      </supertypes>
      <childNodeDefinition autoCreated="false" defaultPrimaryType=""
         mandatory="false" name="*" onParentVersion="VERSION"
protected="false"
         sameNameSiblings="false">
         <requiredPrimaryTypes>
            <requiredPrimaryType>my:node</requiredPrimaryType>
         </requiredPrimaryTypes>
      </childNodeDefinition>
   </nodeType>
   
   <!-- my:node -->
   <nodeType hasOrderableChildNodes="false" isMixin="false"
name="my:node"
      primaryItemName="">
      <supertypes>
         <supertype>nt:base</supertype>
         <supertype>mix:versionable</supertype>
      </supertypes>
      <propertyDefinition autoCreated="false" mandatory="false"
multiple="false"
         name="my:reference" onParentVersion="COPY" protected="false"
         requiredType="Reference"/>
   </nodeType>
 
</nodeTypes>

--
Tomasz Dabrowski
email: tomasz.dabrowski@cognifide.com
skype: tomekdab
www: www.cognifide.com

Mime
View raw message