[ 
https://issues.apache.org/jira/browse/FELIX-5802?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16792998#comment-16792998
 ] 

Rob Walker commented on FELIX-5802:
-----------------------------------

David - your last phrase is exactly my issue: 'SCR implementation has a choice 
whether to always return the same instance or an instance per bundle; the SCR 
configuration xml is used to choose between these alternatives.

If the XML says scope=singleton, and the service instance object is not a 
ServiceFactory, then the service reference being created should have a 
service.scope=bundle. It's not logical to have a service reference returned 
which is a singleton, but for it to have a service.scope set to bundle.

> 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)

Reply via email to