[ 
https://issues.apache.org/jira/browse/FELIX-4575?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Malte Burkert resolved FELIX-4575.
----------------------------------

    Resolution: Not a Problem

I managed to get the scenario working by deleting the listener in the event of 
EventListenerHook. This way the registered event for the non-proxied services 
is not delivered to the listeners, but instead the registered event for the 
proxy keeps being delivered as wanted.

> Unexpected behavior using proxies in declarative services
> ---------------------------------------------------------
>
>                 Key: FELIX-4575
>                 URL: https://issues.apache.org/jira/browse/FELIX-4575
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services (SCR)
>         Environment: Operating System: Windows 8
> Software platform: Java 1.7.0_45 with 
> - org.eclipse.osgi (3.9.1.v20140110-1610)
> - org.apache.felix.scr (1.8.2)
>            Reporter: Malte Burkert
>              Labels: proxy, references, scr
>
> I have created the following setup which always shows the wrong and 
> unexpected behavior, which I describe after the setup.
> ===Setup===
> .Hook-Bundle consisting of: 
> - Hook implementing EventListenerHook and FindHook
> > overridden event(event, listeners): creates new proxy instance with 
> > InvocationHandlerProxy and registers the service (only services with a 
> > MANAGED property become proxied)
> > overridden find(bundleContext, name, filter, allServices, references): 
> > removes non-proxied services with a MANAGED property from references
> - InvocationHandlerProxy implementing InvocationHandler
> > overriden invoke(proxy, method, args): logging invocation to system.out and 
> > invokes the passed method on the passed service
> .Dateservice-Bundle
> registers Service which returns current date; has component property MANAGED 
> defined in the related component description
> .Multiplyservice-Bundle
> returns the product of the numbers; has component property MANAGED defined in 
> the related component description
> .Test-Bundle consisting of:
> - Test implementing CommandProvider
> > _test(commandInterpreter): gives an command line interface for executing 
> > the test by using the command "test"; test consists of calling the 
> > Dateservice and Multiplyservice and prints the results with the callee's 
> > classes (to check if proxy is called or not)
> > setter for Dateservice and Multiplyservice, which get called as soon as 
> > service references are fulfilled (both are described as static 1..1 service 
> > references by the component description)
> > unsetter for  Dateservice and Multiplyservice, which get called as soon as 
> > at least on of the service references is not fulfilled any more
> ===Test Scenarios showing the unexpected behavior===
> -Test-Scenario 1:
> 1. Start Hook-Bundle
> 2. Start Test-Bundle
> 3. Start Multiplyservice-Bundle
> 4. Start Dateservice-Bundle
> 5. Execute "test"
> >Expected result: Dateservice and Multiplyservice become proxied, test calls 
> >methods on proxies
> >Observed result: Both proxies are created, but only the Dateservice-Proxy is 
> >passed to the corresponding setter in the Test-class; test calls method on 
> >Dateservice's Proxy and Multiplyservice
> -Test-Scenario 2:
> 1. Start Hook-Bundle
> 2. Start Test-Bundle
> 3. Start Dateservice-Bundle
> 4. Start Multiplyservice-Bundle
> 5. Execute "test"
> >Expected result: Dateservice and Multiplyservice become proxied, test calls 
> >methods on proxies
> >Observed result: Both proxies are created, but only the 
> >Multiplyservice-Proxy is passed to the corresponding setter in the 
> >Test-class; test calls method on Multiplyservice's Proxy and Dateservice
> -Test-Scenario 3:
> 1. Start Hook-Bundle
> 2. Start Dateservice-Bundle
> 3. Start Multiplyservice-Bundle
> 4. Start Test-Bundle
> 5. Execute "test"
> 6. Stop Multiplyservice-Bundle
> 7. Start Multiplyservice-Bundle
> 8. Execute "test"
> 9. Stop Dateservice-Bundle
> 10. Start Dateservice-Bundle
> 11. Execute "test"
> 12. Stop Multiplyservice-Bundle
> 13. Start Multiplyservice-Bundle
> 14. Execute "test"
> 15. Stop Test-Bundle
> 16. Start Test-Bundle
> 17. Execute "test"
> >Expected result: whenever Dateservice-, Multiplyservice- or Test-Bundle are 
> >started executing test should make calls on the Proxies of Dateservice and 
> >Multiplyservice
> >Observed results in executing test in step:
> 5: everything as expected
> 8. everything as expected
> 11. only proxy for Dateservice called
> 14. only proxy for Multiplyservice called
> 17. everything as expected



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to