Package org.apache.felix.dm

Examples of org.apache.felix.dm.DependencyManager


@RunWith(PaxExam.class)
public class FilterIndexResourceAdapterTest extends TestBase {
    @Test
    public void testBasicResourceAdapter() throws Exception {
        System.setProperty("org.apache.felix.dependencymanager.filterindex", "objectClass");
        DependencyManager m = new DependencyManager(context);
        // helper class that ensures certain steps get executed in sequence
        Ensure e = new Ensure();
        // create a resource provider
        ResourceProvider provider = new ResourceProvider(e);
        // activate it
        m.add(m.createComponent().setImplementation(provider).add(m.createServiceDependency().setService(ResourceHandler.class).setCallbacks("add", "remove")));
        // create a resource adapter for our single resource
        // note that we can provide an actual implementation instance here because there will be only one
        // adapter, normally you'd want to specify a Class here
        m.add(m.createResourceAdapterService("(&(path=/path/to/*.txt)(host=localhost))", false, null, "changed")
              .setImplementation(new ResourceAdapter(e)));
        // wait until the single resource is available
        e.waitForStep(3, 5000);
        // trigger a 'change' in our resource
        provider.change();
        // wait until the changed callback is invoked
        e.waitForStep(4, 5000);
        m.clear();
     }
View Full Code Here


    /**
     * Checks that a ServiceDependency propagates the dependency service properties to the provided service properties.
     */
    @Test
    public void testServiceDependencyPropagate() {
        DependencyManager m = new DependencyManager(context);
        // helper class that ensures certain steps get executed in sequence
        Ensure e = new Ensure();
        Component c1 = m.createComponent()
                      .setImplementation(new C1(e))
                      .add(m.createServiceDependency().setService(C2.class).setRequired(true).setCallbacks("bind", null));

        Component c2 = m.createComponent()
                      .setInterface(C2.class.getName(), new Hashtable() {{ put("foo", "bar"); }})
                      .setImplementation(new C2())
                      .add(m.createServiceDependency().setService(C3.class).setRequired(true).setPropagate(true));

        Component c3 = m.createComponent()
                      .setInterface(C3.class.getName(), new Hashtable() {{ put("foo2", "bar2"); }})
                      .setImplementation(new C3());
       
        m.add(c1);
        m.add(c2);
        m.add(c3);

        e.waitForStep(3, 10000);
       
        m.remove(c3);
        m.remove(c2);
        m.remove(c1);
        m.clear();
    }
View Full Code Here

    public void testServiceWithCallbacksAndThreeDependencies() {
        invokeTest(context, 3);
    }

    private void invokeTest(BundleContext context, int numberOfServices) {
        DependencyManager m = new DependencyManager(context);
        // create a number of services
    for (int i = 0; i < numberOfServices; i++) {
      final int num = i;
      m.add(m.createComponent()
          .setInterface(Service.class.getName(), null)
          .setImplementation(new Service() {
              public String toString() {
                  return "A" + num;
                  }
              }
          )
        );
    }

    // create a service with dependency which will be invoked on a callback instance
    CallbackInstance instance = new CallbackInstance();
    m.add(m.createComponent()
        .setImplementation(new SimpleService() {})
        .add(m.createServiceDependency()
        .setService(Service.class)
        .setCallbacks(instance, "added", "removed")
        .setRequired(true)
      )
    );
   
    Assert.assertEquals(numberOfServices, instance.getCount());
    m.clear();
    }
View Full Code Here

@RunWith(PaxExam.class)
public class AdapterWithAspectCallbacksTest extends TestBase {
    @Test
    public void testAdapterWithAspectMultipleTimes() {
        DependencyManager m = new DependencyManager(context);
        // helper class that ensures certain steps get executed in sequence
        Ensure e = new Ensure();

        Component aspect1 = m.createAspectService(OriginalService.class, null, 10, null)
              .setImplementation(ServiceAspect.class);
         
      Component aspect2 = m.createAspectService(OriginalService.class, null, 15, null)
              .setImplementation(ServiceAspect.class);
     
        Component adapter = m.createAdapterService(OriginalService.class, null, "add", null, "remove", "swap")
              .setInterface(AdaptedService.class.getName(), null)
              .setImplementation(ServiceAdapter.class);
       
        m.add(adapter);
        m.add(aspect1);
       
        List originals = new ArrayList();
        List consumers = new ArrayList();
        int count = 100;
        for (int i = 0; i < count; i++) {
          // create a service provider and consumer
          Dictionary props = new Hashtable();
          props.put("number", "" + i);
          Component original = m.createComponent()
              .setImplementation(new ServiceProvider("" + i, e))
              .setInterface(OriginalService.class.getName(), props);
         
          Component consumer = m.createComponent()
              .setImplementation(new ServiceConsumer(e, "" + i))
              .add(m.createServiceDependency()
                  .setService(AdaptedService.class, "(number=" + i + ")")
                  .setCallbacks("add", null, "remove", "swap")
                  .setRequired(true)
              );
         
          m.add(original);
          e.waitForStep(1 + i, 15000);         
          originals.add(original);
//          m.add(consumer);
          consumers.add(consumer);
        }
       
        m.add(aspect2);
        e.waitForStep(2 + count, 15000);
        // dumpComponents(m)
       
        for (int i = 0; i < 1; i++) {
          for (Object original : originals) {
            m.remove((Component)original);
          }
          for (Object consumer : consumers) {
            m.remove((Component)consumer);
          }
        }
        m.remove(aspect1);
        m.remove(adapter);
       
        e.waitForStep(count * 3, 15000);
        m.remove(aspect2);
        e.step(count * 3 + 1);
        m.clear();
    }
View Full Code Here

{
    private static Ensure m_ensure;
   
    @Test
    public void testFactoryConfigurationAdapter() {
        DependencyManager m = new DependencyManager(context);
        // helper class that ensures certain steps get executed in sequence
        m_ensure = new Ensure();
       
        // Create a Configuration instance, which will create/update/remove a configuration for factoryPid "MyFactoryPid"
        ConfigurationCreator configurator = new ConfigurationCreator("MyFactoryPid", "key", "value1");
        Component s1 = m.createComponent()
            .setImplementation(configurator)
            .add(m.createServiceDependency()
                .setService(ConfigurationAdmin.class)
                .setRequired(true));

        // Create an Adapter that will be instantiated, once the configuration is created.
        // This Adapter provides an AdapterService, and depends on an AdapterExtraDependency service.
        Component s2 = m.createFactoryConfigurationAdapterService("MyFactoryPid", "updated", true /* propagate CM settings */)
                      .setInterface(AdapterService.class.getName(), new Properties() {{ put("foo", "bar"); }})
                      .setImplementation(Adapter.class);

        s2.add(m.createServiceDependency()
            .setService(AdapterExtraDependency.class)
            .setRequired(true)
            .setAutoConfig(true));
       
        // Create extra adapter service dependency upon which our adapter depends on.
        Component s3 = m.createComponent()
            .setImplementation(new AdapterExtraDependency())
            .setInterface(AdapterExtraDependency.class.getName(), null);
       
        // Create an AdapterService Consumer
        Component s4 = m.createComponent()
            .setImplementation(AdapterServiceConsumer.class)
            .add(m.createServiceDependency()
                .setService(AdapterService.class)
                .setRequired(true)
                .setCallbacks("bind", "change", "remove"));
       
        // Start services
        m.add(s1);
        m.add(s2);
        m.add(s3);
        m.add(s4);
       
        // Wait for step 8: the AdapterService consumer has been injected with the AdapterService, and has called the doService method.
        m_ensure.waitForStep(8, 10000);
       
        // Modify configuration.
        configurator.update("key", "value2");
       
        // Wait for step 13: the AdapterService has been updated, and the AdapterService consumer has seen the change
        m_ensure.waitForStep(13, 10000);
       
        // Remove the configuration
        m.remove(s1); // The stop method will remove the configuration
        m_ensure.waitForStep(16, 10000);
        m.clear();
    }
View Full Code Here

     * - Modify the First lowest ranked aspect (rank=1), and check if all aspects, and client have been orderly called in their "change" callback.
     */
    @Test
    public void testAspectsWithPropagation() {
        System.out.println("----------- Running testAspectsWithPropagation ...");
        DependencyManager m = new DependencyManager(context);
        // helper class that ensures certain steps get executed in sequence
        m_invokeStep = new Ensure();
       
        // Create our original "S" service.
        Dictionary props = new Hashtable();
        props.put("foo", "bar");
        Component s = m.createComponent()
                .setImplementation(new SImpl())
                .setInterface(S.class.getName(), props);
       
        // Create an aspect aware client, depending on "S" service.
        Client clientImpl;
        Component client = m.createComponent()
                .setImplementation((clientImpl = new Client()))
                .add(m.createServiceDependency()
                     .setService(S.class)
                     .setRequired(true)
                     .setDebug("client")
                     .setCallbacks("add", "change", "remove", "swap"));

        // Create some "S" aspects
        Component[] aspects = new Component[ASPECTS];
        for (int rank = 1; rank <= ASPECTS; rank ++) {
            aspects[rank-1] = m.createAspectService(S.class, null, rank, "add", "change", "remove", "swap")
                    .setImplementation(new A("A" + rank, rank));
            props = new Hashtable();
            props.put("a" + rank, "v" + rank);
            aspects[rank-1].setServiceProperties(props);
        }                                   
             
        // Register client
        m.add(client);
       
        // Randomly register aspects and original service
        boolean originalServiceAdded = false;
        for (int i = 0; i < ASPECTS; i ++) {
            int index = getRandomAspect();
            m.add(aspects[index]);
            if (_rnd.nextBoolean()) {
                m.add(s);
                originalServiceAdded = true;
            }
        }
        if (! originalServiceAdded) {
            m.add(s);
        }
             
        // All set, check if client has inherited from top level aspect properties + original service properties
        Map check = new HashMap();
        check.put("foo", "bar");
        for (int i = 1; i < (ASPECTS - 1); i ++) {
            check.put("a" + i, null); // we must not inherit from lower ranks, only from the top-level aspect.
        }
        check.put("a" + ASPECTS, "v" + ASPECTS);
        checkServiceProperties(check, clientImpl.getServiceProperties());

        // Now invoke client, which orderly calls all aspects in the chain, and finally the original service "S".
        System.out.println("-------------------------- Invoking client.");
        clientImpl.invoke();
        m_invokeStep.waitForStep(ASPECTS+1, 5000);
       
        // Now, change original service "S" properties: this will orderly trigger "change" callbacks on aspects, and on client.
        System.out.println("-------------------------- Modifying original service properties.");
        m_changeStep = new Ensure();
        props = new Hashtable();
        props.put("foo", "barModified");
        s.setServiceProperties(props);
       
        // Check if aspects and client have been orderly called in their "changed" callback
        m_changeStep.waitForStep(ASPECTS+1, 5000);
       
        // Check if modified "foo" original service property has been propagated
        check = new HashMap();
        check.put("foo", "barModified");
        for (int i = 1; i < (ASPECTS - 1); i ++) {
            check.put("a" + i, null); // we must not inherit from lower ranks, only from the top-level aspect.
        }
        check.put("a" + ASPECTS, "v" + ASPECTS); // we only see top-level aspect service properties
        checkServiceProperties(check, clientImpl.getServiceProperties());
       
        // Now, change the top-level ranked aspect: it must propagate to all upper aspects, as well as to the client
        System.out.println("-------------------------- Modifying top-level aspect service properties.");

        m_changeStep = new Ensure();
        for (int i = 1; i <= ASPECTS; i ++) {
            m_changeStep.step(i); // only client has to be changed.
        }
        props = new Hashtable();
        props.put("a" + ASPECTS, "v" + ASPECTS + "-Modified");
        aspects[ASPECTS-1].setServiceProperties(props); // That triggers change callbacks for upper aspects (with rank >= 2)
        m_changeStep.waitForStep(ASPECTS+1, 5000); // check if client have been changed.
       
        // Check if top level aspect service properties have been propagated up to the client.
        check = new HashMap();
        check.put("foo", "barModified");
        for (int i = 1; i < (ASPECTS - 1); i ++) {
            check.put("a" + i, null); // we must not inherit from lower ranks, only from the top-level aspect.
        }
        check.put("a" + ASPECTS, "v" + ASPECTS + "-Modified");
        checkServiceProperties(check, clientImpl.getServiceProperties());

        // Clear all components.
        m_changeStep = null;
        m.clear();
    }   
View Full Code Here

     * - Modify S original service properties, and check if the client has been called in its "change" callback.
     */
    @Test
    public void testAspectsWithPropagationAndNoCallbacks() {
        System.out.println("----------- Running testAspectsWithPropagation ...");
        DependencyManager m = new DependencyManager(context);
        // helper class that ensures certain steps get executed in sequence
        m_invokeStep = new Ensure();
       
        // Create our original "S" service.
        Dictionary props = new Hashtable();
        props.put("foo", "bar");
        Component s = m.createComponent()
                .setImplementation(new SImpl())
                .setInterface(S.class.getName(), props);
       
        // Create an aspect aware client, depending on "S" service.
        Client clientImpl;
        Component client = m.createComponent()
                .setImplementation((clientImpl = new Client()))
                .add(m.createServiceDependency()
                     .setService(S.class)
                     .setRequired(true)
                     .setDebug("client")
                     .setCallbacks("add", "change", "remove"));

        // Create some "S" aspects
        Component[] aspects = new Component[ASPECTS];
        for (int rank = 1; rank <= ASPECTS; rank ++) {
            aspects[rank-1] = m.createAspectService(S.class, null, rank)
                    .setImplementation(new A("A" + rank, rank));
            props = new Hashtable();
            props.put("a" + rank, "v" + rank);
            aspects[rank-1].setServiceProperties(props);
        }                                   
             
        // Register client
        m.add(client);
       
        // Randomly register aspects and original service
        boolean originalServiceAdded = false;
        for (int i = 0; i < ASPECTS; i ++) {
            int index = getRandomAspect();
            m.add(aspects[index]);
            if (_rnd.nextBoolean()) {
                m.add(s);
                originalServiceAdded = true;
            }
        }
        if (! originalServiceAdded) {
            m.add(s);
        }
             
        // All set, check if client has inherited from top level aspect properties + original service properties
        Map check = new HashMap();
        check.put("foo", "bar");
        for (int i = 1; i < (ASPECTS - 1); i ++) {
            check.put("a" + i, null); // we must not inherit from lower ranks, only from the top-level aspect.
        }
        check.put("a" + ASPECTS, "v" + ASPECTS);
        checkServiceProperties(check, clientImpl.getServiceProperties());

        // Now invoke client, which orderly calls all aspects in the chain, and finally the original service "S".
        System.out.println("-------------------------- Invoking client.");
        clientImpl.invoke();
        m_invokeStep.waitForStep(ASPECTS+1, 5000);
       
        // Now, change original service "S" properties: this will orderly trigger "change" callbacks on aspects, and on client.
        System.out.println("-------------------------- Modifying original service properties.");
        m_changeStep = new Ensure();
        for (int i = 1; i <= ASPECTS; i ++) {
            m_changeStep.step(i); // skip aspects, which have no "change" callbacks.
        }
        props = new Hashtable();
        props.put("foo", "barModified");
        s.setServiceProperties(props);
       
        // Check if aspects and client have been orderly called in their "changed" callback
        m_changeStep.waitForStep(ASPECTS+1, 5000);
       
        // Check if modified "foo" original service property has been propagated
        check = new HashMap();
        check.put("foo", "barModified");
        for (int i = 1; i < (ASPECTS - 1); i ++) {
            check.put("a" + i, null); // we must not inherit from lower ranks, only from the top-level aspect.
        }
        check.put("a" + ASPECTS, "v" + ASPECTS); // we only see top-level aspect service properties
        checkServiceProperties(check, clientImpl.getServiceProperties());
       
        // Clear all components.
        m_changeStep = null;
        m.clear();
    }   
View Full Code Here

     */
    @Test
    public void testAdapterWithAspectsAndPropagation() {
        System.out.println("----------- Running testAdapterWithAspectsAndPropagation ...");

        DependencyManager m = new DependencyManager(context);
        m_invokeStep = new Ensure();
       
        // Create our original "S" service.
        Dictionary props = new Hashtable();
        props.put("foo", "bar");
        Component s = m.createComponent()
                .setImplementation(new SImpl())
                .setInterface(S.class.getName(), props);
       
        // Create some "S" aspects
        Component[] aspects = new Component[ASPECTS];
        for (int rank = 1; rank <= ASPECTS; rank ++) {
            aspects[rank-1] = m.createAspectService(S.class, null, rank, "add", "change", "remove", "swap")
                    .setImplementation(new A("A" + rank, rank));
            props = new Hashtable();
            props.put("a" + rank, "v" + rank);
            aspects[rank-1].setServiceProperties(props);
        }
       
        // Create S2 adapter (which adapts S1 to S2 interface)
        Component adapter = m.createAdapterService(S.class, null, "add", "change", "remove", "swap")
                .setInterface(S2.class.getName(), null)
                .setImplementation(new S2Impl());
       
        // Create Client2, which depends on "S2" service.
        Client2 client2Impl;
        Component client2 = m.createComponent()
                .setImplementation((client2Impl = new Client2()))
                .add(m.createServiceDependency()
                     .setService(S2.class)
                     .setRequired(true)
                     .setDebug("client")                    
                     .setCallbacks("add", "change", null));
             
        // Register client2
        m.add(client2);
       
        // Register S2 adapter
        m.add(adapter);
       
        // Randomly register aspects, original service
        boolean originalServiceAdded = false;
        for (int i = 0; i < ASPECTS; i ++) {
            int index = getRandomAspect();
            m.add(aspects[index]);
            if (_rnd.nextBoolean()) {
                m.add(s);
                originalServiceAdded = true;
            }
        }
        if (! originalServiceAdded) {
            m.add(s);
        }
            
        // Now invoke client2, which orderly calls all S1 aspects, then S1Impl, and finally S2 service
        System.out.println("-------------------------- Invoking client2.");
        client2Impl.invoke2();
        m_invokeStep.waitForStep(ASPECTS+2, 5000);
       
        // Now, change original service "S" properties: this will orderly trigger "change" callbacks on aspects, S2Impl, and Client2.
        System.out.println("-------------------------- Modifying original service properties.");
        m_changeStep = new Ensure();
        props = new Hashtable();
        props.put("foo", "barModified");
        s.setServiceProperties(props);
       
        // Check if aspects and Client2 have been orderly called in their "changed" callback
        m_changeStep.waitForStep(ASPECTS+2, 5000);
       
        // Check if modified "foo" original service property has been propagated to Client2
        Map check = new HashMap();
        check.put("foo", "barModified");
        for (int i = 1; i < (ASPECTS - 1); i ++) {
            check.put("a" + i, null); // we must not inherit from lower ranks, only from the top-level aspect.
        }
        check.put("a" + ASPECTS, "v" + ASPECTS);
        checkServiceProperties(check, client2Impl.getServiceProperties());
       
        // Clear all components.
        m_changeStep = null;
        m.clear();
    }   
View Full Code Here

@RunWith(PaxExam.class)
public class FELIX2348_ResourceAdapterTest extends TestBase {
    @Test
    public void testBasicResourceAdapter() throws Exception {
        DependencyManager m = new DependencyManager(context);
        // helper class that ensures certain steps get executed in sequence
        Ensure e = new Ensure();
        m.add(m.createResourceAdapterService("(&(path=/path/to/*.txt)(host=localhost))", false, null, "changed")
              .setImplementation(new ResourceAdapter(e)));
        m.add(m.createComponent().setImplementation(new ResourceProvider(e)).add(m.createServiceDependency().setService(ResourceHandler.class).setCallbacks("add", "remove")));
        e.waitForStep(3, 5000);
        m.clear();
     }
View Full Code Here

@RunWith(PaxExam.class)
public class MultipleExtraDependencyTest2 extends TestBase {
    @Test
    public void testMultipleExtraDependencies()
    {
        DependencyManager m = new DependencyManager(context);
        Ensure e = new Ensure();
       
        Component sp2 = m.createComponent()
            .setImplementation(ServiceProvider2.class).setInterface(ServiceProvider2.class.getName(), null)
            .setCallbacks("init", "start", "stop", null)
            .setComposition("getComposition");
       
        Component sp = m.createComponent()
              .setImplementation(ServiceProvider.class)
              .setInterface(ServiceInterface.class.getName(), new Hashtable() {{ put("foo", "bar"); }})                           
              .setCallbacks("init", "start", "stop", null);
       
        Component sc = m.createComponent()
              .setImplementation(ServiceConsumer.class)
              .setCallbacks("init", "start", "stop", null);
       
        // Provide the Sequencer service to the MultipleAnnotationsTest class.
        Component sequencer =
            m.createComponent().setImplementation(new SequencerImpl(e))
                             .setInterface(Sequencer.class.getName(), null);
        m.add(sp2);
        m.add(sp);
        m.add(sc);
        m.add(sequencer);

        // Check if the test.annotation components have been initialized orderly
        e.waitForStep(7, 10000);
       
        // Stop the test.annotation bundle
        m.remove(sequencer);
        m.remove(sp);
        m.remove(sp2);
        m.remove(sc);
       
//        m.remove(sp2);
//        m.remove(sc);
//        m.remove(sp);
//        m.remove(sequencer);
       

       
        // And check if the test.annotation bundle has been deactivated orderly
        e.waitForStep(11, 10000);
        m.clear();
    }
View Full Code Here

TOP

Related Classes of org.apache.felix.dm.DependencyManager

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.