Hello! On 2017-05-26T14:23:43 +0200 Peter Kriens <[email protected]> wrote:
> Yes, you can reuse the Req/Cap model in OSGi for this.
>
> I understand the problem is that bundle A.1 uses bundle B.1 and A.2 uses B.2.
> If A.1 loads a resource X, then it should originate form B.1 and A.2 should
> load from B.2?
Yes, that's exactly it.
> If you use the resource services as mandatory dependencies in DS then you
> must register the services with a property and use the target filter on the
> consuming side. A bit awkward since it should contain a version. This does
> not have to be the OSGi bundle version but that of course makes it easier.
> One trick is to make the version a Java constant. You can then refer to this
> constant in a bnd package version annotation AND in your target filter.
> (Assuming you use bnd.)
That might not be so bad.
> Another trick is to use a class/interface specific for each application...
I'm not sure about this one (I think it may be impractical for reasons
I won't go into here), but I'll keep it in mind.
> If the services are not involved in DS dependencies then there is another
> solution. First, A.1 must require B1 in some defined namespace. This can be
> osgi.wiring.bundle or osgi.wiring.package if you have a package name that is
> shared. You can also define your own namespace.
I'm not sure what you mean by "some defined namespace". Do you mean
something along the lines of:
Provide-Capability:
com.io7m.example.resource_package;name:String="a.b.c";version:Version="1.0.0"
... and:
Require-Capability:
com.io7m.example.resource_package;filter:="(&(name=a.b.c)(version=1.0.0))"
?
> You should then register as a DS service factory.
Is this a specific reference to something in DS, or is it just a
general term describing a service that instantiates other services?
> When you get a request you get the calling bundle. Through the bundle
> you can find out to what bundles it is wired to in the given
> namespace.
Can you explain a little more about this? I don't see anything in the
Bundle interface, is there some specific API for accessing wiring?
> You can then do the resource request. Clearly, this
> requires that one DS component is shared between all versions of
> applications. In this model the easiest is to register a single
> service for all resources.
Yes, I think in practice, there'd be a single ResourceResolver service
through which all requests are made.
M
pgp1HFNwR2IRV.pgp
Description: OpenPGP digital signature
_______________________________________________ OSGi Developer Mail List [email protected] https://mail.osgi.org/mailman/listinfo/osgi-dev
