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


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 is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to