[ 
https://issues.apache.org/jira/browse/FELIX-3701?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13947873#comment-13947873
 ] 

Jesper Thuun-Petersen commented on FELIX-3701:
----------------------------------------------

We see this exact issue in our application. It a major problem for us, as our 
customers have problems running the JMS endpoints we provide.

I have debugged the problem extensively, and I've found the exact spot where 
the problem arises:

>From BundleRevisionImpl#initializeContentPath():
{code}
    fragments = Util.getFragments(m_wiring);
    fragmentContents = m_wiring.getFragmentContents();
{code}

Now, in our case, two bundles A and B has been fragment hosted to C. 
A and B embed som jms-driver classes each.

further on in the code we have: 

{code}
        if (fragments != null){
            for (int i = 0; i < fragments.size(); i++){            {
                calculateContentPath(
                    fragments.get(i), fragmentContents.get(i), contentList, 
false);
            }
        }
{code}

The problem is, that the order of fragments and fragmentContents are not always 
the same, and as you see above, the index is used when calculating the content 
path.
The effect is that bundle A's embedded jars are used when looking for classes 
in bundle B.



> Intermittent CNFE with embedded jars in Fragment Bundles
> --------------------------------------------------------
>
>                 Key: FELIX-3701
>                 URL: https://issues.apache.org/jira/browse/FELIX-3701
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: framework-4.0.2
>            Reporter: Chetan Mehrotra
>            Priority: Minor
>         Attachments: fragment-bug.zip
>
>
> In our Sling based OSGi application we are observing intermittent 
> ClassNotFoundException for classes which are present in a jar embedded in 
> Fragment bundle. Below are the details about the scenario
> 1. Host bundle BundleA com.day.crx.sling.server [52]
> 2. It has two fragment bundles attached. 
> - FragBundle1 - com.day.crx.crx-auth-ldap
> - FragBundle2 - org.jcrutil.aws
> 3. FragBundle2 - Has some embedded jars referred in the classpath
> - FragJar2-1 - aws-java-sdk-1.3.11.jar
> - FragJar2-2 - httpclient-4.2-beta1.jar
> 4. There is a DS Component in BundleA which on activate tries to create an 
> instance of class which is present in FragJar2-1
> Now the issue is at times on clean start we get a CNFE at #4. On getting the 
> Felix debug logs following things were observed
> 1. The logs report that INFO: Bundle BundleA [52] Class path entry not found: 
> FragJar2-1.jar
> 2. The above entries are not observed if CNFE is not thrown
> 3. If I try to debug the code the issue goes away which indicates that its 
> possible a race condition issue
> 4. In case the issue is seen and I see the fragment bundle dir in the felix 
> folder the fragment jar is NOT exploded i.e. no bundle.jar-embedded directory
> 5. Once the issue is seen it does not go away in restart
> 6. The issue was not seen in 3.0.x releases
> 7. If I flatten the jars present in fragment bundles the issue is not seen
> 8. Exception seen is [1]
> [1]
> 05.10.2012 12:03:19.362 *ERROR* [FelixStartLevel] com.day.crx.sling.server 
> [com.day.crx.sling.server.impl.jmx.ManagedRepository] The activate method has 
> thrown an exception (java.lang.NoClassDefFoundError: 
> com/amazonaws/services/s3/model/S3ObjectSummary) 
> java.lang.NoClassDefFoundError: 
> com/amazonaws/services/s3/model/S3ObjectSummary
>       at java.lang.Class.forName0(Native Method)
>       at java.lang.Class.forName(Class.java:247)
>       at 
> org.apache.jackrabbit.core.config.SimpleBeanFactory.newInstance(SimpleBeanFactory.java:30)
>       at 
> org.apache.jackrabbit.core.config.BeanConfig.newInstance(BeanConfig.java:191)
>       at 
> org.apache.jackrabbit.core.config.RepositoryConfigurationParser$4.getDataStore(RepositoryConfigurationParser.java:997)
>       at 
> org.apache.jackrabbit.core.config.RepositoryConfig.getDataStore(RepositoryConfig.java:1072)
>       at 
> org.apache.jackrabbit.core.RepositoryImpl.<init>(RepositoryImpl.java:279)
>       at com.day.crx.core.CRXRepositoryImpl.<init>(CRXRepositoryImpl.java:307)
>       at com.day.crx.core.CRXRepositoryImpl.create(CRXRepositoryImpl.java:262)
>       at com.day.crx.core.CRXRepositoryImpl.create(CRXRepositoryImpl.java:245)
>       at 
> com.day.crx.sling.server.impl.jmx.ManagedRepository.activate(ManagedRepository.java:169)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at 
> org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:227)
>       at 
> org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:38)
>       at 
> org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:591)
>       at 
> org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:472)
>       at 
> org.apache.felix.scr.impl.helper.ActivateMethod.invoke(ActivateMethod.java:146)
>       at 
> org.apache.felix.scr.impl.manager.ImmediateComponentManager.createImplementationObject(ImmediateComponentManager.java:226)
>       at 
> org.apache.felix.scr.impl.manager.ImmediateComponentManager.createComponent(ImmediateComponentManager.java:118)
>       at 
> org.apache.felix.scr.impl.manager.DelayedComponentManager.createRealComponent(DelayedComponentManager.java:95)
>       at 
> org.apache.felix.scr.impl.manager.AbstractComponentManager$Registered.getService(AbstractComponentManager.java:1296)
>       at 
> org.apache.felix.scr.impl.manager.DelayedComponentManager.getService(DelayedComponentManager.java:88)
>       at 
> org.apache.felix.framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:308)
>       at 
> org.apache.felix.framework.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:219)
>       at 
> org.apache.felix.framework.ServiceRegistry.getService(ServiceRegistry.java:310)
>       at org.apache.felix.framework.Felix.getService(Felix.java:3420)
>       at 
> org.apache.felix.framework.BundleContextImpl.getService(BundleContextImpl.java:468)
>       at 
> org.osgi.util.tracker.ServiceTracker.addingService(ServiceTracker.java:450)
>       at 
> org.apache.aries.jmx.whiteboard.Activator$MBeanTracker.addingService(Activator.java:101)
>       at 
> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:980)
>       at 
> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:906)
>       at 
> org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:262)
>       at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:234)
>       at 
> org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:941)
>       at 
> org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:932)
>       at 
> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:793)
>       at 
> org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:543)
>       at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4260)
>       at org.apache.felix.framework.Felix.registerService(Felix.java:3275)
>       at 
> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346)
>       at 
> org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:456)
>       at 
> org.apache.felix.scr.impl.manager.AbstractComponentManager.registerComponentService(AbstractComponentManager.java:508)
>       at 
> org.apache.felix.scr.impl.manager.AbstractComponentManager$Unsatisfied.activate(AbstractComponentManager.java:1157)
>       at 
> org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:334)
>       at 
> org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:158)
>       at 
> org.apache.felix.scr.impl.config.ImmediateComponentHolder.enableComponents(ImmediateComponentHolder.java:313)
>       at 
> org.apache.felix.scr.impl.BundleComponentActivator.loadDescriptor(BundleComponentActivator.java:241)
>       at 
> org.apache.felix.scr.impl.BundleComponentActivator.initialize(BundleComponentActivator.java:147)
>       at 
> org.apache.felix.scr.impl.BundleComponentActivator.<init>(BundleComponentActivator.java:111)
>       at 
> org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:274)
>       at org.apache.felix.scr.impl.Activator.bundleChanged(Activator.java:192)
>       at 
> org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:868)
>       at 
> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:789)
>       at 
> org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:514)
>       at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4244)
>       at org.apache.felix.framework.Felix.startBundle(Felix.java:1923)
>       at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191)
>       at 
> org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295)
>       at java.lang.Thread.run(Thread.java:662)
> Caused by: java.lang.ClassNotFoundException: *** Class 
> 'com.amazonaws.services.s3.model.S3ObjectSummary' was not found. Bundle 
> com.day.crx.sling.server [52] does not import package 
> 'com.amazonaws.services.s3.model', nor is the package exported by any other 
> bundle or available from the system class loader. ***
>       at 
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1857)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>       ... 62 more
> Caused by: java.lang.ClassNotFoundException: 
> com.amazonaws.services.s3.model.S3ObjectSummary not found by 
> com.day.crx.sling.server [52]
>       at 
> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1460)
>       at 
> org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
>       at 
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
>       ... 63 more



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to