We do not have any export/import packages on the subsystem level. Only
on the level of the fragment and bundle.

To be more specific in our questioning:

Is there any reason (by design) that
BundleResource.computeOsgiIdentityCapability only works for bundles
and not for fragments? Or is this a bug in the Aries implementation?

Best regards,

Wouter Bancken
Solution Engineer

2015-07-29 13:22 GMT+02:00 Kamesh Sampath <[email protected]>:
>
> IMHO, the subsystem type “osgi.subsystem.feature” is a unscoped subsystem, 
> ideally the Export/Import packages from them will not have any effect.
>
> For “osgi.subsystem.feature” you can play with imports/exports within the 
> respective Subsytem resources instead at the subsystem level.
>
>
>
> On 29/07/15 4:46 pm, "Wouter Bancken" wrote:
>
> Dear,
>
> We are having an issue trying to resolve fragment bundles in a subsystem.
>
> We created a subsystem (esa) with the following content (SUBSYSTEM.MF):
>
> Subsystem-Content:
> be.aca.test-service-fragment;type="osgi.fragment";version="[1.0.1.SNAPSHOT,1.0.1.SNAPSHOT]";start-order:="1",
> be.aca.test-service;version="[1.0.1.SNAPSHOT,1.0.1.SNAPSHOT]";start-order:="2"
>
> Subsystem-Type:
> osgi.subsystem.feature
>
> The fragment contains the following import packages:
>
> Fragment-Host:
> be.aca.test-service
>
> Import-Package:
> be.aca.subsystem.test_service.api;version="[1.0,2)",
> be.aca.test-service
>
> The bundle contains the following import and export packages:
>
> Export-Package:
> be.aca.subsystem.test_service.api;uses:="be.aca.subsystem.test_service.internal";version="1.0.1.SNAPSHOT",
> be.aca.subsystem.test_service.internal;version="1.0.1.SNAPSHOT"
> be.aca.subsystem.test_component";version="1.0.1.SNAPSHOT"
>
> Import-Package:
> be.aca.subsystem.test_component;version="[1.0,2)",
> be.aca.subsystem.test_service.api;version="[1.0,2)"
>
> The current Aries implementation is not able to find the capability for the 
> fragment. The SubsystemResource will first look in the SystemRepository and 
> next in the LocalRepository. This LocalRepository should be able to find the 
> fragment but it can not. We tracked this down to 
> BundleResource.computeOsgiIdentityCapability which calls a constructor of 
> OsgiIdentityCapability that manually sets the type to osgi-bundle (while it 
> should be fragment in this case). Therefore the requirement and the 
> capability do not match because of the different type.
>
> Since the LocalRepository can not find the capability, the Aries 
> implementation will delegate it to our own custom repository which will then 
> find the correct capability in the esa. However due to the import and export 
> statements, our custom repository will also provide the other packages from 
> the test-service bundle.
>
> Next, it will try to resolve the test-service bundle. As always it will first 
> look in the SystemRepository and next in the LocalRepository. The 
> LocalRepository will be able to find the capabilities. At this point, the 
> following uses constraint violation occurs:
>
> Caused by: org.osgi.service.resolver.ResolutionException: Uses constraint 
> violation. Unable to resolve resource be.aca.test-service 
> [jar:file:/Users/wouter/Projects/common/osgi-subsystem-support/runner/directory-repository/test-service-fragment-subsystem-1.0.1-SNAPSHOT.esa!/test-service-1.0.1-SNAPSHOT.jar]
>  because it exports package 'be.aca.subsystem.test_service.internal' and is 
> also exposed to it from resource be.aca.test-service 
> [/var/folders/25/w0q5j_mn4l1771mbxtg6yhhm0000gn/T/inputStreamExtract3569880077784275121.zip/test-service-1.0.1-SNAPSHOT.jar]
>  via the following dependency chain:
>
> be.aca.test-service 
> [jar:file:/Users/wouter/Projects/common/osgi-subsystem-support/runner/directory-repository/test-service-fragment-subsystem-1.0.1-SNAPSHOT.esa!/test-service-1.0.1-SNAPSHOT.jar]
>     import: 
> (&(osgi.wiring.package=be.aca.subsystem.test_service.api)(&(version>=1.0.0)(!(version>=2.0.0))))
>      |
>     export: osgi.wiring.package: be.aca.subsystem.test_service.api; 
> uses:=be.aca.subsystem.test_service.internal
>     export: osgi.wiring.package=be.aca.subsystem.test_service.internal
> be.aca.test-service 
> [/var/folders/25/w0q5j_mn4l1771mbxtg6yhhm0000gn/T/inputStreamExtract3569880077784275121.zip/test-service-1.0.1-SNAPSHOT.jar]
>
> We think that this issue will be resolved if the LocalRepository would be 
> able to find fragments since the LocalRepository will then be able to handle 
> all requirements. Our custom repository would never be called.
>
> Is it a known issue that the BundleResource can not distinguish between 
> bundles and fragments? Or was there a reason to fix the type to "bundle"?
>
> Best regards,
>
> Wouter Bancken
> Solution Engineer

Reply via email to