Search in sources :

Example 1 with BundleTrackerCustomizer

use of org.osgi.util.tracker.BundleTrackerCustomizer in project aries by apache.

the class ScopeAdminTest method testBundleServiceIsolation.

@Test
public void testBundleServiceIsolation() throws Exception {
    // make sure we are using a framework that provides composite admin service
    assertNotNull("scope admin should not be null", scope);
    System.out.println("able to get scope admin service");
    bt = new BundleTracker(bundleContext, Bundle.INSTALLED | Bundle.UNINSTALLED | Bundle.ACTIVE, new BundleTrackerCustomizer() {

        public synchronized Object addingBundle(Bundle bundle, BundleEvent event) {
            if (event == null) {
                System.out.println("ScopeAdminTest - adding Bundle: " + bundle.getSymbolicName() + " event: null");
            } else {
                System.out.println("ScopeAdminTest - adding Bundle: " + bundle.getSymbolicName() + " event: " + event.getType());
                addEventCount++;
            }
            return bundle;
        }

        public synchronized void modifiedBundle(Bundle bundle, BundleEvent event, Object object) {
            if (event == null) {
                System.out.println("ScopeAdminTest - modifying Bundle: " + bundle.getSymbolicName() + " event: null");
            } else {
                System.out.println("ScopeAdminTest - modifying Bundle: " + bundle.getSymbolicName() + " event: " + event.getType());
                modifyEventCount++;
            }
        }

        public synchronized void removedBundle(Bundle bundle, BundleEvent event, Object object) {
            if (event == null) {
                System.out.println("ScopeAdminTest - removing Bundle: " + bundle.getSymbolicName() + " event: null");
            } else {
                System.out.println("ScopeAdminTest - removing Bundle: " + bundle.getSymbolicName() + " event: " + event.getType());
                removeEventCount++;
            }
        }
    });
    bt.open();
    ScopeUpdate su = scope.newScopeUpdate();
    ScopeUpdate childScopeUpdate = su.newChild("scope_test1");
    su.getChildren().add(childScopeUpdate);
    addPackageImportPolicy("org.osgi.framework", childScopeUpdate);
    addPackageImportPolicy("org.osgi.util.tracker", childScopeUpdate);
    // build up installInfo object for the scope
    InstallInfo info1 = new InstallInfo("helloIsolation", new URL("mvn:org.apache.aries.subsystem/org.apache.aries.subsystem.example.helloIsolation/0.1-SNAPSHOT"));
    InstallInfo info2 = new InstallInfo("helloIsolationRef", new URL("mvn:org.apache.aries.subsystem/org.apache.aries.subsystem.example.helloIsolationRef/0.1-SNAPSHOT"));
    List<InstallInfo> bundlesToInstall = childScopeUpdate.getBundlesToInstall();
    bundlesToInstall.add(info1);
    bundlesToInstall.add(info2);
    // add bundles to be installed, based on subsystem content
    su.commit();
    assertEquals("add event count should be 0 since 0 bundles are installed in root scope", 0, addEventCount);
    assertEquals("modify event count should be 0", 0, modifyEventCount);
    assertEquals("remove event count should be 0", 0, removeEventCount);
    // start all bundles in the scope scope_test1
    Collection<Bundle> bundlesToStart = childScopeUpdate.getScope().getBundles();
    for (Bundle b : bundlesToStart) {
        b.start();
    }
    assertEquals("add event count should be 0 since 0 bundles are installed in root scope", 0, addEventCount);
    assertEquals("modify event count should be 0", 0, modifyEventCount);
    assertEquals("remove event count should be 0", 0, removeEventCount);
    try {
        ServiceReference sr = bundleContext.getServiceReference(HelloIsolation.class.getName());
        fail("should not be able to get the sr for HelloIsolation service");
    } catch (Exception ex) {
    // expected 
    } catch (Error er) {
    // expected
    }
    // test bundle find hooks
    Bundle[] bundles = bundleContext.getBundles();
    for (Bundle b : bundles) {
        System.out.println("Bundle is " + b.getBundleId() + ": " + b.getSymbolicName());
        if (b.getSymbolicName().indexOf("org.apache.aries.subsystem.example.helloIsolation") > -1) {
            fail("bundles with name starts with org.apache.aries.subsystem.example.helloIsolation should be in a different scope");
        }
    }
    // test bundle service find hook
    //ServiceReference sr = bundleContext.getServiceReference(HelloIsolation.class.getName());
    //assertNull("sr should be null", sr);
    Collection<Scope> children = scope.getChildren();
    assertEquals(1, children.size());
    for (Scope child : children) {
        if (child.getName().equals("scope_test1")) {
            Collection<Bundle> buns = child.getBundles();
            assertEquals(2, buns.size());
            assertEquals(0, child.getChildren().size());
            for (Bundle b : buns) {
                assertTrue(b.getSymbolicName().indexOf("org.apache.aries.subsystem.example.helloIsolation") > -1);
            }
        }
    }
    // install a test bundle in the root scope
    URL url = new URL("mvn:org.apache.felix/org.apache.felix.fileinstall/2.0.8");
    bundleContext.installBundle("org.apache.felix.fileinstall-rootScope", url.openStream());
    assertEquals("add event count should be 1 since 1 bundles are installed", 1, addEventCount);
    assertEquals("modify event count should be 0", 0, modifyEventCount);
    assertEquals("remove event count should be 0", 0, removeEventCount);
    // remove child scope
    su = scope.newScopeUpdate();
    //        Collection<Scope> scopes = su.getToBeRemovedChildren();
    Collection<ScopeUpdate> scopes = su.getChildren();
    childScopeUpdate = scopes.iterator().next();
    // obtain child scope admin from service registry
    //        String filter = "ScopeName=scope_test1";
    //        Scope childscope = getOsgiService(Scope.class, filter, DEFAULT_TIMEOUT);
    Scope childScopeAdmin = childScopeUpdate.getScope();
    assertEquals(scope, childScopeAdmin.getParent());
    //        scopes.add(childScopeAdmin);
    scopes.remove(childScopeUpdate);
    su.commit();
    assertFalse(scope.getChildren().contains(childScopeAdmin));
    su = scope.newScopeUpdate();
    assertFalse(su.getChildren().contains(childScopeUpdate));
//        childScopeAdmin = null;
//        try {
//            childScopeAdmin = getOsgiService(Scope.class, filter, DEFAULT_TIMEOUT);
//        } catch (Exception ex) {
//            // ignore
//        }
//        assertNull("scope admin service for the scope should be unregistered", childScopeAdmin);
}
Also used : InstallInfo(org.apache.aries.subsystem.scope.InstallInfo) Bundle(org.osgi.framework.Bundle) BundleTracker(org.osgi.util.tracker.BundleTracker) ScopeUpdate(org.apache.aries.subsystem.scope.ScopeUpdate) BundleTrackerCustomizer(org.osgi.util.tracker.BundleTrackerCustomizer) URL(java.net.URL) BundleException(org.osgi.framework.BundleException) InvalidSyntaxException(org.osgi.framework.InvalidSyntaxException) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) ServiceReference(org.osgi.framework.ServiceReference) HelloIsolation(org.apache.aries.subsystem.example.helloIsolation.HelloIsolation) Scope(org.apache.aries.subsystem.scope.Scope) BundleEvent(org.osgi.framework.BundleEvent) Test(org.junit.Test)

Example 2 with BundleTrackerCustomizer

use of org.osgi.util.tracker.BundleTrackerCustomizer in project sling by apache.

the class Activator method start.

public void start(BundleContext context) throws Exception {
    commandMap = new OsgiMailcapCommandMap();
    for (Bundle bundle : context.getBundles()) registerBundleMailcapEntries(bundle);
    CommandMap.setDefaultCommandMap(commandMap);
    bundleTracker = new BundleTracker(context, Bundle.ACTIVE | Bundle.UNINSTALLED | Bundle.STOP_TRANSIENT, new BundleTrackerCustomizer() {

        public void removedBundle(Bundle bundle, BundleEvent event, Object object) {
            unregisterBundleMailcapEntries(bundle);
        }

        public void modifiedBundle(Bundle bundle, BundleEvent event, Object object) {
            unregisterBundleMailcapEntries(bundle);
            registerBundleMailcapEntries(bundle);
        }

        public Object addingBundle(Bundle bundle, BundleEvent event) {
            registerBundleMailcapEntries(bundle);
            return bundle;
        }
    });
    bundleTracker.open();
}
Also used : Bundle(org.osgi.framework.Bundle) BundleEvent(org.osgi.framework.BundleEvent) BundleTracker(org.osgi.util.tracker.BundleTracker) BundleTrackerCustomizer(org.osgi.util.tracker.BundleTrackerCustomizer)

Example 3 with BundleTrackerCustomizer

use of org.osgi.util.tracker.BundleTrackerCustomizer in project aries by apache.

the class Activator method start.

/*
     * (non-Javadoc)
     * 
     * @see
     * org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext
     * )
     */
public void start(BundleContext context) throws Exception {
    System.out.println("bundle helloIsolation start");
    SecurityManager security = System.getSecurityManager();
    if (security != null) {
        System.out.println("HelloIsolationImpl: system manager is not null");
    } else {
        System.out.println("HelloIsolationImpl: system manager is still null");
    }
    sr = context.registerService(HelloIsolation.class.getName(), new HelloIsolationImpl(), null);
    bt = new BundleTracker(context, Bundle.INSTALLED | Bundle.UNINSTALLED | Bundle.ACTIVE, new BundleTrackerCustomizer() {

        public synchronized Object addingBundle(Bundle bundle, BundleEvent event) {
            if (event == null) {
                System.out.println("HelloIsolation " + bundle.getSymbolicName() + "_" + bundle.getVersion().toString() + " - adding Bundle: " + bundle.getSymbolicName() + " event: null");
            } else {
                System.out.println("HelloIsolation  " + bundle.getSymbolicName() + "_" + bundle.getVersion().toString() + " - adding Bundle: " + bundle.getSymbolicName() + " event: " + event.getType());
            }
            addEventCount++;
            return bundle;
        }

        public synchronized void modifiedBundle(Bundle bundle, BundleEvent event, Object object) {
            if (event == null) {
                System.out.println("HelloIsolation " + bundle.getSymbolicName() + "_" + bundle.getVersion().toString() + "  - modifying Bundle: " + bundle.getSymbolicName() + " event: null");
            } else {
                System.out.println("HelloIsolation " + bundle.getSymbolicName() + "_" + bundle.getVersion().toString() + " - modifying Bundle: " + bundle.getSymbolicName() + " event: " + event.getType());
            }
            modifyEventCount++;
        }

        public synchronized void removedBundle(Bundle bundle, BundleEvent event, Object object) {
            if (event == null) {
                System.out.println("HelloIsolation " + bundle.getSymbolicName() + "_" + bundle.getVersion().toString() + " - removing Bundle: " + bundle.getSymbolicName() + " event: null");
            } else {
                System.out.println("HelloIsolation " + bundle.getSymbolicName() + "_" + bundle.getVersion().toString() + " - removing Bundle: " + bundle.getSymbolicName() + " event: " + event.getType());
            }
            removeEventCount++;
        }
    });
    bt.open();
}
Also used : Bundle(org.osgi.framework.Bundle) BundleEvent(org.osgi.framework.BundleEvent) BundleTracker(org.osgi.util.tracker.BundleTracker) BundleTrackerCustomizer(org.osgi.util.tracker.BundleTrackerCustomizer)

Example 4 with BundleTrackerCustomizer

use of org.osgi.util.tracker.BundleTrackerCustomizer in project aries by apache.

the class RecursiveBundleTrackerTest method makeSUT.

@SuppressWarnings("rawtypes")
private void makeSUT() {
    BundleTrackerCustomizer customizer = Skeleton.newMock(BundleTrackerCustomizer.class);
    sut = new InternalRecursiveBundleTracker(context, Bundle.INSTALLED | Bundle.STARTING | Bundle.ACTIVE | Bundle.STOPPING, customizer, true);
    sut.open();
}
Also used : BundleTrackerCustomizer(org.osgi.util.tracker.BundleTrackerCustomizer) InternalRecursiveBundleTracker(org.apache.aries.util.tracker.InternalRecursiveBundleTracker)

Aggregations

BundleTrackerCustomizer (org.osgi.util.tracker.BundleTrackerCustomizer)4 Bundle (org.osgi.framework.Bundle)3 BundleEvent (org.osgi.framework.BundleEvent)3 BundleTracker (org.osgi.util.tracker.BundleTracker)3 IOException (java.io.IOException)1 MalformedURLException (java.net.MalformedURLException)1 URL (java.net.URL)1 HelloIsolation (org.apache.aries.subsystem.example.helloIsolation.HelloIsolation)1 InstallInfo (org.apache.aries.subsystem.scope.InstallInfo)1 Scope (org.apache.aries.subsystem.scope.Scope)1 ScopeUpdate (org.apache.aries.subsystem.scope.ScopeUpdate)1 InternalRecursiveBundleTracker (org.apache.aries.util.tracker.InternalRecursiveBundleTracker)1 Test (org.junit.Test)1 BundleException (org.osgi.framework.BundleException)1 InvalidSyntaxException (org.osgi.framework.InvalidSyntaxException)1 ServiceReference (org.osgi.framework.ServiceReference)1