Hello!

On 2017-05-26T14:23:43 +0200
Peter Kriens <peter.kri...@aqute.biz> 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

Attachment: pgp1HFNwR2IRV.pgp
Description: OpenPGP digital signature

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

Reply via email to