Thanks Tim, you're the best. I just figured it out and it was that indeed. Doesn't solve my issue 100% as it opens a few other more minor issues.
Alain On Wed, Nov 14, 2018 at 9:47 AM Tim Ward <tim.w...@paremus.com> wrote: > Hi Alain, > > I note that you don’t include the setter code, nor the activation code, > but at a guess in one of these two places you are calling getService on the > ComponentServiceObjects. This will in turn cause the ZKRenderer service > instance to be created. If this instance also has an injected reference to > the current service (i.e. the one you’re asking about in this email) then > that’s a cycle. In more complex scenarios there may be other services in > between, but fundamentally it’s A -> B -> A. The way around this is to > either: > > > - Remove the cycle entirely > - Make it so that the dependency in one part can be optionally > satisfied later > - Avoid getting an instance from the ComponentServiceObjects until > *after* your activate is called. > > > I hope this makes sense, > > Tim > > > On 14 Nov 2018, at 13:59, Alain Picard via osgi-dev < > osgi-dev@mail.osgi.org> wrote: > > Facing an issue here. I have a component registering service as such: > @Reference( > cardinality=ReferenceCardinality.MULTIPLE, > policy=ReferencePolicy.DYNAMIC, > scope=PROTOTYPE_REQUIRED, > target=ZKRenderer.CONFIG_TARGET > ) > private void addRenderer(ComponentServiceObjects<ZKRenderer<?>> > factory, Map<String,Object> props) { ...} > > where target is: "(|(iris.zkRenderer.dynamicTester=*) > (iris.zkRenderer.staticTester.element=*))" > to capture only instances that have at least one of those properties. > > I also have other component that defines services under a subinterface of > ZKRenderer, but they don't match the filter. > > But when they get instantiated via componentServiceObject.getService(); it > leads to: > !MESSAGE Circular reference detected trying to get service > {com.castortech.iris.ecp.view.spi.core.zk.ZKRendererFactory}={service.id=502, > service.bundleid=418, service.scope=bundle, > component.name=com.castortech.iris.ecp.view.internal.zk.ZKRendererFactoryImpl, > iris.zkRenderer.debug=false, component.id=1066} > stack of references: > ServiceReference: (5 or 6 of those) > > debugging I'm finding that it goes through the DependencyManager and seems > to want to register the service against the above service reference. I > thought that it was due to the fact that this was a subinterface and added > the filter, but it doesn't seem to change anything and I'm getting at a > lost to figure this one out. > > Thanks > Alain > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org > https://mail.osgi.org/mailman/listinfo/osgi-dev > > >
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev