Hello,

I have question about the serviceloader specific manifest entries (WRT
to the example from
https://blog.osgi.org/2013/02/javautilserviceloader-in-osgi.html):

The bundle that provides an implementation by SPI should contain that
manifest headers:

Require-Capability:
osgi.extender;filter:="(osgi.extender=osgi.serviceloader.registrar)"
Provide-Capability: osgi.serviceloader;osgi.serviceloader=foo.bar.MySPI

Let's name it bundle_provider for the moment.

If my reading has been correct the ServiceLoader Registrar (e.g.
SPI-fly) register the specific implementation class OSGi Services so
that OSGi-aware consumers can simply use them from the OSGi Service
Registry.

If "@Reference foo.bar.MySPI" is used in a component (so a consumer)
the bnd tooling will generate that manifest header:

Require-Capability:
osgi.service;filter:="(objectClass=foo.bar.MySPI)";effective:=active

Wouldn't it make sense if bundle_provider also contains the header:

Provide-Capability: osgi.service;objectClass:List<String>="foo.bar.MySPI"

As bundle_provider requires the ServiceLoader Registrar can't it state
that the OSGi service is provided?

Or should the requirement
osgi.service;filter:="(objectClass=foo.bar.MySPI)";effective:=active
also be satisfied by the provided
osgi.serviceloader;osgi.serviceloader=foo.bar.MySPI
(and its requirement for the Registrar) by the resolving implementations?

Best regards,
Markus
_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to