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
pgp1HFNwR2IRV.pgp
Description: OpenPGP digital signature
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev