Uploaded image for project: 'Felix'
  1. Felix
  2. FELIX-4575

Unexpected behavior using proxies in declarative services

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Not A Problem
    • Affects Version/s: None
    • Fix Version/s: None
    • Labels:
    • 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)

      Description

      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

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              kilsoar Malte Burkert

              Dates

              • Created:
                Updated:
                Resolved:

                Issue deployment