[
https://issues.apache.org/jira/browse/SLING-2018?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Carsten Ziegeler resolved SLING-2018.
-------------------------------------
Resolution: Won't Fix
> Using RepositoryAccessor inside a bundle
> ----------------------------------------
>
> Key: SLING-2018
> URL: https://issues.apache.org/jira/browse/SLING-2018
> Project: Sling
> Issue Type: Bug
> Components: JCR
> Affects Versions: 3
> Environment: org.apache.sling.jcr.base 1065652 revision
> Reporter: Luca Stancapiano
> Priority: Major
>
> I install a bundle with a Felix activator inside the Sling/Felix version
> builded from the trunk.
> Here the code inside the activate method:
> RepositoryAccessor repositoryAccessor = new
> RepositoryAccessor();
> Repository repository =
> repositoryAccessor.getRepositoryFromURL("jndi://jackrabbit:java.naming.factory.initial=org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory,java.naming.provider.url=localhost");
> I get this Exception:
> javax.naming.NoInitialContextException: Cannot instantiate class:
> org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory [Root
> exception is java.lang.ClassNotFoundException:
> org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory]
> at
> javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
> at
> javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
> at javax.naming.InitialContext.init(InitialContext.java:223)
> at javax.naming.InitialContext.<init>(InitialContext.java:197)
> at
> org.apache.sling.jcr.base.util.RepositoryAccessor.getRepository(RepositoryAccessor.java:75)
> at
> org.apache.sling.jcr.base.util.RepositoryAccessor.getRepositoryFromURL(RepositoryAccessor.java:171)
> at com.sourcesense.stone.jcr.base.Activator.start(Activator.java:32)
> at
> org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:629)
> at org.apache.felix.framework.Felix.activateBundle(Felix.java:1827)
> at org.apache.felix.framework.Felix.startBundle(Felix.java:1744)
> at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1148)
> at
> org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:264)
> at java.lang.Thread.run(Thread.java:680)
> Caused by: java.lang.ClassNotFoundException:
> org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory
> at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
> at
> org.apache.sling.launchpad.base.shared.LauncherClassLoader.loadClass(LauncherClassLoader.java:133)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
> at
> org.apache.felix.framework.ModuleImpl.doImplicitBootDelegation(ModuleImpl.java:1535)
> at
> org.apache.felix.framework.ModuleImpl.searchDynamicImports(ModuleImpl.java:1472)
> at
> org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:734)
> at org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:71)
> at
> org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1768)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
> at java.lang.Class.forName0(Native Method)
> at java.lang.Class.forName(Class.java:247)
> at
> com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)
> at
> javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
> ... 12 more
> I suppose JNDI doesn't work inside a local environment. I see this code in
> org.apache.sling.jcr.base.util.RepositoryAccessor: row 73:
> Thread.currentThread().setContextClassLoader(
> this.getClass().getClassLoader());
> InitialContext initialContext = new
> InitialContext(jndiContext);
> that ClassLoader contains only the packages:
> {org.apache.sling.jcr.base.util=package org.apache.sling.jcr.base.util,
> org.apache.sling.jcr.base.internal.loader=package
> org.apache.sling.jcr.base.internal.loader, org.apache.sling.jcr.base=package
> org.apache.sling.jcr.base}
> If I delete the Thread.currentThread().setContextClassLoader and I use the
> default ClassLoader, the InitialContext is loaded correctly
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)