[ https://issues.apache.org/jira/browse/FELIX-5802?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16792993#comment-16792993 ]
Rob Walker commented on FELIX-5802: ----------------------------------- The more I dig into this - the more it feels wrong. The definition of SCOPE_BUNDLE is as follows: If, however, the registered service object implements the [ServiceFactory|https://osgi.org/specification/osgi.core/7.0.0/framework.api.html#org.osgi.framework.ServiceFactory] interface, the service has [SCOPE_BUNDLE|https://osgi.org/specification/osgi.core/7.0.0/framework.api.html#org.osgi.framework.Constants.SCOPE_BUNDLE] scope and the Framework must call methods on the registered object to obtain a customized service object for each distinct bundle that gets the service. But although we are setting service.scope here, we are not in fact obtain a customized service object for each bundle that gets the service. It feels like the fact that SCR is using a ServiceFactory model itself is clouding the proper definition here. Only if the service object being registered by SCR is itself a ServiceFactory should we be setting a service.scope of bundle. And in that case, we should be passing the ServiceFactory request through to the service object so that it can create customized service instances per requesting bundle (actually we may in fact be doing that part, my service is a singleton so I only ever see 1 instance created). > Service Component created via xml defines scope='singleton' and service > specifies property with scope='bundle' > -------------------------------------------------------------------------------------------------------------- > > Key: FELIX-5802 > URL: https://issues.apache.org/jira/browse/FELIX-5802 > Project: Felix > Issue Type: Bug > Components: Framework > Affects Versions: framework-5.6.10 > Reporter: Matt Pavlovich > Priority: Major > > Component with scope='singleton' created via xml or annotation has the > service registered with a property of service.scope='bundle' > Project reproducing the issue is available here: > [https://github.com/mattrpav/felix-5802] > Steps to reproduce: > # Define a serviceComponent via xml (or osgi ds annotation) > # Deploy bundle > # run scr:info (observe Service Scope: singleton) > # run service:list (observe service.scope = bundle) > Investigation: > * Service registers with property of 'service.scope=bundle' here: > [https://github.com/apache/felix/blob/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java#L327] > * Debugging in felix.scr confirms that the xml is being parsed correctly and > the returned component metadata shows the 'scope' = 'singleton' correctly > [o.a.felix.scr.impl.xml.XmlHandler#L362|https://github.com/apache/felix/blob/trunk/scr/src/main/java/org/apache/felix/scr/impl/xml/XmlHandler.java#L362] > * Debugging confirms that felix.scr is detecting DS13 namespace > scr:info output: > {noformat} > karaf@root()> scr:info TestModule > *** Bundle: com.foo.test-module (124) > Component Description: > Name: BundleModule > Implementation Class: com.foo.TestModule > Default State: enabled > Activation: immediate > Configuration Policy: optional > Activate Method: activate > Deactivate Method: deactivate > Modified Method: - > Configuration Pid: [TestModule] > Services: > com.foo.api.Module > Service Scope: singleton > Component Description Properties: > Component Configuration: > ComponentId: 4 > State: active > Component Configuration Properties: > component.id = 4 > component.name = TestModule{noformat} > service:list output > {noformat} > karaf@root()> service:list > [com.foo.api.Module] > ------------------------ > component.id = 4 > component.name = TestModule > service.bundleid = 124 > service.id = 141 > service.scope = bundle > Provided by : > Company :: Foo :: TestModule (124){noformat} > OSGI-INF/serviceComponent.xml > {noformat} > <?xml version="1.0" encoding="utf-8"?> > <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.3.0" > name="TestModule" immediate="true"> > <service scope="singleton"> > <provide interface="com.foo.api.Module" /> > </service> > <implementation class="com.foo.TestModule" /> > </scr:component>{noformat} > > Note: When the same impl class is reconfigured to register as a service via > BundleActivator, the service has a service.scope = 'singleton' -- This message was sent by Atlassian JIRA (v7.6.3#76005)