[ https://issues.apache.org/jira/browse/JCR-1099?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12524114 ]
David Rauschenbach commented on JCR-1099: ----------------------------------------- Thanks Angela, Here's what I mean by my spi2jcr setup (repository.xml already attached): // Bring up the in-mem repository final URL REPOSITORY_URL = getClass().getClassLoader().getResource("/repository.xml"); storageDir = new File(System.getProperty("java.io.tmpdir")); RepositoryConfig config = RepositoryConfig.create(REPOSITORY_URL.toURI(), storageDir.getAbsolutePath()); repository = new TransientRepository(config); // Bring up the spi2jcr bridge in front of in-memory repository BatchReadConfig batchReadConfig = new BatchReadConfig(); RepositoryService spi2jcrRepositoryService = new RepositoryServiceImpl(repository, batchReadConfig); Next, I wrote an SPI that is coupled to that spi2jcrRepositoryService. I wrap my SPI in jcr2spi, so that's what I meant by the direct coupling of a JCR front-end being invoked by unit tests, a jcr back-end that's the in-mem store, and an SPI coupling inbetween. > jcr2spi NodeEntryImpl.getPath() blows stack due to getIndex() calling itself > ---------------------------------------------------------------------------- > > Key: JCR-1099 > URL: https://issues.apache.org/jira/browse/JCR-1099 > Project: Jackrabbit > Issue Type: Bug > Components: SPI > Reporter: David Rauschenbach > Assignee: angela > Attachments: repository.xml > > > The jcr2spi NodeEntryImpl class contains logic that causes getIndex() to call > itself. > Calling code: > Session sess = repo.login(creds); > Node inboxNode = sess.getRootNode().getNode("Inbox"); > inboxNode.getPath(); <== blows stack > Tracing reveals: > 1. NodeEntryImpl.getPath() ultimately calls getIndex() > 2. getIndex() calls NodeState.getDefinition() > 3. which calls ItemDefinitionProviderImpl.getQNodeDefinition(...) > 4. which catches a RepositoryException then calls > NodeEntryImpl.getWorkspaceId() > 5. which calls NodeEntryImpl.getWorkspaceIndex() > 6. which calls getIndex() (back to step 2, ad infinitum) > Configuration: > 1. A configuration is loaded specifying in-memory persist manager > 2. Config is wrapped in TransientRepository > 3. that's wrapped in spi2jcr's RepositoryService using default > BatchReadConfig > 4. a jcr2spi provider is instantiated that directly couples to spi2jcr > 5. Node in question is created as follows: > Session sess = repo.login(creds); > sess.getRootNode().addNode("Inbox", "nt:folder"); > sess.save(); > I guess that's about it. > David -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.