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

John Ross updated ARIES-927:
----------------------------

    Attachment: aries927-areMultipleFrameworksAvailable.patch

Yes, I see what you're saying. The BlueprintExtender creates a 
RecursiveBundleTracker which won't create an InternalRecursiveBundleTracker if 
areMultipleFrameworksAvailable() returns false. However, the current check 
there is not sufficient because Equinox will register the 
org.osgi.service.framework.CompositeBundleFactory service even though the 
corresponding package is x-internal and resolution mode is strict. So the 
service is there, but the Util bundle does not have access to the 
org.osgi.service.framework package. Moving the additional check to 
RecursiveBundleTracker.areMultipleFrameworksAvailable() solves the issue just 
as well and is fine with me. The latest patch incorporates that idea and would 
replace the previous patch.
                
> Imports org.osgi.service.framework package as optional but assumes it's there 
> nevertheless.
> -------------------------------------------------------------------------------------------
>
>                 Key: ARIES-927
>                 URL: https://issues.apache.org/jira/browse/ARIES-927
>             Project: Aries
>          Issue Type: Bug
>          Components: Util
>            Reporter: John Ross
>         Attachments: aries927-areMultipleFrameworksAvailable.patch, 
> aries927.patch
>
>
> Util imports the org.osgi.service.framework package as optional. However, the 
> InternalRecursiveBundleTracker invokes "x instanceof CompositeBundle" in the 
> addingBundle() method without protection. This results in a 
> NoClassDefFoundError, like the one below, in environments where the package 
> is not available. One such environment is the OSGi CT, where "private" 
> package imports, such as the x-internal org.osgi.service.framework package 
> provided by Equinox, are forbidden.
> ! Failed to start bundle org.apache.aries.blueprint-1.0.0, exception 
> activator error org/osgi/service/framework/CompositeBundle from: 
> org.apache.aries.util.tracker.InternalRecursiveBundleTracker:addingBundle#67
> org.osgi.framework.BundleException: Exception in 
> org.apache.aries.blueprint.container.BlueprintExtender.start() of bundle 
> org.apache.aries.blueprint.
>       at 
> org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734)
>       at 
> org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
>       at 
> org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
>       at 
> org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300)
>       at aQute.launcher.Launcher.update(Launcher.java:287)
>       at aQute.launcher.Launcher.activate(Launcher.java:212)
>       at aQute.launcher.Launcher.run(Launcher.java:133)
>       at aQute.launcher.Launcher.main(Launcher.java:68)
> Caused by: java.lang.NoClassDefFoundError: 
> org/osgi/service/framework/CompositeBundle
>       at 
> org.apache.aries.util.tracker.InternalRecursiveBundleTracker.addingBundle(InternalRecursiveBundleTracker.java:67)
>       at 
> org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:467)
>       at 
> org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:1)
>       at 
> org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
>       at 
> org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
>       at org.osgi.util.tracker.BundleTracker.open(BundleTracker.java:156)
>       at 
> org.apache.aries.util.tracker.RecursiveBundleTracker.open(RecursiveBundleTracker.java:95)
>       at 
> org.apache.aries.blueprint.container.BlueprintExtender$2.serviceFound(BlueprintExtender.java:104)
>       at 
> org.apache.aries.util.tracker.SingleServiceTracker.update(SingleServiceTracker.java:157)
>       at 
> org.apache.aries.util.tracker.SingleServiceTracker.findMatchingReference(SingleServiceTracker.java:115)
>       at 
> org.apache.aries.util.tracker.SingleServiceTracker.open(SingleServiceTracker.java:98)
>       at 
> org.apache.aries.blueprint.container.BlueprintExtender.start(BlueprintExtender.java:112)
>       at 
> org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at 
> org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
>       ... 7 more
> Caused by: java.lang.ClassNotFoundException: 
> org.osgi.service.framework.CompositeBundle
>       at 
> org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
>       at 
> org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
>       at 
> org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
>       at 
> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>       ... 22 more

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to