[ https://issues.apache.org/jira/browse/JCR-2985?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13060575#comment-13060575 ]
Stefan Guggisberg commented on JCR-2985: ---------------------------------------- i was able to reproduce the issue. it's most likely a CachingHierarchyManager-related issue. > Transient space bug in combination with removeItem() + addNode() + > itemExists() > ------------------------------------------------------------------------------- > > Key: JCR-2985 > URL: https://issues.apache.org/jira/browse/JCR-2985 > Project: Jackrabbit Content Repository > Issue Type: Bug > Components: jackrabbit-core > Affects Versions: 2.2.5 > Environment: Win7 > Reporter: Thomas Auinger > > Please see my original mailing list mail, and reply from Jukka following below > Hi, > I just tested against the brandnew 2.2.7, and can still repro this bug. Would > you please check yourself? The test class code is below. > Simply grab a repositorty.xml file (I took mine from > "jackrabbit-core-2.2.7-sources.jar\org\apache\jackrabbit\core\repository.xml"). > When you start the test on a missing or empty repo-folder, it works. Running > it a second time doesn't. > Thanks! > Tom > package de.byteconsult.spoon.cmd; > import java.io.File; > import java.io.FileInputStream; > import java.io.FileNotFoundException; > import javax.jcr.Node; > 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; > import org.junit.Assert; > import org.junit.Test; > public class TestRepoBug { > @Test > public void addTest() throws Exception { > Repository repo = > this.createFileBasedRepository("target/test-jackrabbit", > "src/test/resources/test-repository.xml"); > if (repo != null) { > System.out.println("Version: " + > repo.getDescriptor(Repository.REP_VERSION_DESC)); > SimpleCredentials credentials = new > SimpleCredentials("admin", "admin".toCharArray()); > Session session = repo.login(credentials); > String path = "/test"; > if (session.itemExists(path)) { > System.out.println("removing item at " + path); > session.removeItem(path); > } > Node node = session.getRootNode().addNode("test"); > boolean existsBefore = session.itemExists(path); > node.getPath(); > boolean existsAfter = session.itemExists(path); > Assert.assertTrue("Node must already exist before > calling node.getPath()", existsBefore); > Assert.assertTrue("Node must still exist after calling > node.getPath()", existsAfter); > session.save(); > } > else { > Assert.fail("Failed to create repository"); > } > } > protected Repository createFileBasedRepository(String folderPath, > String repositoryXmlPath) > throws RepositoryException, FileNotFoundException { > // create homedir > File homeDir = new File(folderPath); > homeDir.mkdirs(); > File confFile = new File(repositoryXmlPath); > if (!confFile.isFile()) { > throw new IllegalArgumentException("Repository config > file is not a valid file: " > + confFile.getAbsolutePath()); > } > // create RepositoryConfig instance > RepositoryConfig repositoryConfig = RepositoryConfig.create(new > FileInputStream(confFile), > homeDir.getAbsolutePath()); > Repository repository = RepositoryImpl.create(repositoryConfig); > return repository; > } > } > -----Ursprüngliche Nachricht----- > Von: Tobias Bocanegra [mailto:tri...@adobe.com] > Gesendet: Mittwoch, 8. Juni 2011 09:05 > An: us...@jackrabbit.apache.org > Betreff: Re: Session Question > hi, > i tested it with jackrabbit 2.2.5 and 2.2.6 and i always get 'true', 'true'. > but with this test case: > @Test > public void addTest() throws RepositoryException { > TransientRepository repo = new TransientRepository(); > System.out.println("Version: " + > repo.getDescriptor(Repository.REP_VERSION_DESC)); > Session session = repo.login(); > String path = "/test"; > if (session.itemExists(path)) { > System.out.println("removing item at " + path); > session.removeItem(path); > } > Node node = session.getRootNode().addNode("test"); > System.out.println(session.itemExists(path)); > node.getPath(); > System.out.println(session.itemExists(path)); > } > regards, toby > On Tue, Jun 7, 2011 at 2:37 AM, Thomas Auinger <a...@byteconsult.de> wrote: > > A very basic problem has just come up (Jackrabbit 2.2.5). It seems that > > session.itemExists() returns true for a newly created Node only after > > node.getPath() has been called.?! > > > > Here is the code: > > > > Session session = prompt.getSession(); > > String path = "/test"; > > if (session.itemExists(path)) { > > System.out.println("removing item at " + path); > > session.removeItem(path); > > } > > Node node = session.getRootNode().addNode("test"); > > System.out.println(session.itemExists(path)); > > node.getPath(); > > System.out.println(session.itemExists(path)); > > > > And the output is > > > > removing item at /test > > false > > true > > > > Does that make any sense at all? I know that I can get it to work by > > calling session.save() after the addNode() line, but since its all the > > same session, it seems like a bug. Yet a bug too fundamental to really > > be one... :O > > > > The code runs with Spring Testing Framework, in-VM Repository, Session > > created via Springmodules Bean > > > > Thanks > > Tom > ---------------------------------- > Jukka Zitting wrote: > Looks like Jackrabbit gets confused by the transient removeItem() operation > that precedes the addNode(). Basically, the problem is not that addNode() + > itemExists() wouldn't work, but that the much less common removeItem() + > addNode() + itemExists() combination is having trouble. You can avoid the > issue by adding a session.save() call after removeItem(). -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira