Hi Alexander, > Using DS is currently not an option as the whole project uses blueprint and > the mix of DS and blueprint is not recommended as far as I know.
By whom and why? OSGi services are OSGi services, it doesn’t matter which framework you use to register or consume them. I regularly use mixtures of frameworks without issue. Mixing blueprint and DS in the same bundle isn’t normally a good idea, but even that works fine if you use services to communicate. > Thanks anyways. I worked around by having the activator waiting until a given > object is registered in jndi. How exactly are you waiting, and is this a real org.osgi.framework.BundleActivator? That’s a pretty low level type and offers you pretty much no help, you would probably get a lot of benefit by *not* using a BundleActivator and using DS or blueprint instead. Also you *must not* block in your activator start method as this risks deadlocking the system. Regards, Tim > On 16 Aug 2017, at 11:08, <alexander.sah...@brodos.de> > <alexander.sah...@brodos.de> wrote: > > Hello Tim. > > Thanks for the quick response and the clarification. In fact it's exactly > like you described. My intention is to postpone the STARTING/ACTIVE state > until a certain requirement is fulfilled. > > Using DS is currently not an option as the whole project uses blueprint and > the mix of DS and blueprint is not recommended as far as I know. > > Thanks anyways. I worked around by having the activator waiting until a given > object is registered in jndi. > > Regards, > Alexander > > > > Hi Alexander, > > An active time capability is ignored by the OSGi framework. This means that > it will not prevent your OSGi bundle moving from the INSTALLED state to the > RESOLVED state. > > What you’re seeing is that the resolver can also be run elsewhere, for > example to find or validate a set of bundles to be installed. This is usually > called a “provisioning operation”, and is what Karaf is trying to do here. > When the resolver is used by these tools they are free to decide which > requirements should be effective, and in this case Karaf is requiring that > your active time capability is matched by something (after all it’s not > optional!). > >> What I try to achieve is that a certain bundle activation is postponed until >> a given requirement is met. Is is possible anyways? > > What do you mean by bundle activation? If you mean that you want your bundle > to remain in the INSTALLED state then you need to use a resolve-time > effective requirement for this. If you mean that you want your bundle not to > move to the STARTING/ACTIVE state then requirements/capabilites cannot help > with this. Instead you should react to the registration of OSGi services. A > tool like Declarative Services will make this easy, and allow your components > to dynamically respond to the presence (or lack of) an OSGi service. > > Regards, > > Tim > >> On 16 Aug 2017, at 07:43, alexander.sah...@brodos.de >> <mailto:alexander.sah...@brodos.de> wrote: >> >> Hi there. >> >> According to >> http://osgi-dev.mail.osgi.narkive.com/GfJqfPGZ/require-capability-osgi-service-filter-effective-active-and-blueprint >> >> <http://osgi-dev.mail.osgi.narkive.com/GfJqfPGZ/require-capability-osgi-service-filter-effective-active-and-blueprint> >> (and the OSGi spec), a R-C header with effective:=active should be ignored >> by OSGi framework. But when I create a R-C header like >> >> Require-Capability: >> osgi.service;effective:=active;objectClass="javax.sql.DataSource";filter:="(osgi.jndi.service.name=bam)" >> >> to indicate a dependency to a DataSource, the resolver tells me: >> >> org.osgi.service.resolver.ResolutionException: Unable to resolve root: >> missing requirement [root] osgi.identity; osgi.identity=isaac-app; >> type=karaf.feature; version="[2.1.2.SNAPSHOT,2.1.2.SNAPSHOT]"; >> filter:="(&(osgi.identity=isaac-app)(type=karaf.feature)(version>=2.1.2.SNAPSHOT)(version<=2.1.2.SNAPSHOT))" >> [caused by: Unable to resolve isaac-app/2.1.2.SNAPSHOT: missing requirement >> [isaac-app/2.1.2.SNAPSHOT] osgi.identity; osgi.identity=isaac-service; >> type=karaf.feature [caused by: Unable to resolve >> isaac-service/2.1.2.SNAPSHOT: missing requirement >> [isaac-service/2.1.2.SNAPSHOT] osgi.identity; >> osgi.identity=com.brodos.isaac.service; type=osgi.bundle; >> version="[2.1.2.SNAPSHOT,2.1.2.SNAPSHOT]"; resolution:=mandatory [caused by: >> Unable to resolve com.brodos.isaac.service/2.1.2.SNAPSHOT: missing >> requirement [com.brodos.isaac.service/2.1.2.SNAPSHOT] osgi.service; >> objectClass=javax.sql.DataSource; effective:=active; >> filter:="(osgi.jndi.service.name=bam)"]]] >> >> Shouldn't it be ignored by OSGi framework? >> >> What I try to achieve is that a certain bundle activation is postponed until >> a given requirement is met. Is is possible anyways? >> >> Best regards, >> Alexander >