Thomas Watson created FELIX-3934:
------------------------------------
Summary: osgi.identity capabilities from fragments can cause
problems when resolving multiple fragments
Key: FELIX-3934
URL: https://issues.apache.org/jira/browse/FELIX-3934
Project: Felix
Issue Type: Bug
Components: Resolver
Environment: All
Reporter: Thomas Watson
If you are resolving multiple fragments against the same host at the same time
then the osgi.identity capabilities provided by fragments can cause the wiring
result to be miscalculated because a wrapped host is not used to populate the
wires. Here is a simple scenario:
Bundle-SymbolicName: A
Bundle-SymbolicName: F1
Fragment-Host: A
Bundle-SymbolicName: F2
Fragment-Host: A
Bundle-SymbolicName: B
Require-Capability: osgi.identity; filter:="(osgi.identity=F2)"
During the final phase of resolution when calling populateWireMap, if the first
Resource target is B then it will cause a recursive call to populateWireMap
using the raw resouce of F2 since it provides the identity capability required
by B. This ultimately will result in another recursive call to populateWireMap
using the raw resource of A since it provides the host capability required by
F2. This is wrong, we must ensure only wrappedResources for the host of a
resolving fragment resource are passed to populateWireMap.
All other namespaces besides osgi.identity are considered payload capabilities
from fragments. This results in proper wrapping of the capabilities provided
by fragments which then results in proper calls to populateWireMap since
capabilities coming from fragments will be properly wrapped with their hosting
resource. But in the case of osgi.identity no wrapping is done for the
capability so we are left with the raw capability when resolving a required
wire to the osgi.identity.
I will provide a patch with a potential fix. The fix is probably not the most
elegant approach. It basically spacial cases the osgi.identity namespace in
the recursive call to populateWireMap to check if the providing resource is a
fragment and if so then find the target wrapped host for proper calls to
populateWireMap
--
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