You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Richard S. Hall (JIRA)" <ji...@apache.org> on 2014/03/26 15:30:16 UTC

[jira] [Resolved] (FELIX-3701) Intermittent CNFE with embedded jars in Fragment Bundles

     [ https://issues.apache.org/jira/browse/FELIX-3701?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Richard S. Hall resolved FELIX-3701.
------------------------------------

    Resolution: Fixed
      Assignee: Richard S. Hall

Ok, I've applied a patch to trunk to try to address this issue. Essentially, when we moved to R4.3 we used public API to calculate the set of attached fragments instead of internal API. However, the public API approach didn't necessarily return the fragments in the desired order. I added back an internal method to BundleWiringImpl to get the fragments, so now getFragments and getFragmentContents() should be parallel again. Please test and let me know if this resolves your issue. If so, close this bug. If not, reopen it. Thanks.

> 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
>            Assignee: Richard S. Hall
>            Priority: Minor
>             Fix For: framework-4.6.0
>
>         Attachments: debug info.jpg, 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)