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

Reply via email to