[
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.