Search in sources :

Example 31 with FrameworkWiring

use of org.osgi.framework.wiring.FrameworkWiring in project motech by motech.

the class JarGeneratorServiceImpl method refreshModule.

private void refreshModule(String moduleName) {
    LOGGER.info("Refreshing module '{}' before restarting the entities bundle", moduleName);
    Bundle bundleToRefresh = WebBundleUtil.findBundleBySymbolicName(bundleContext, moduleName);
    if (bundleToRefresh != null) {
        Bundle frameworkBundle = bundleContext.getBundle(0);
        FrameworkWiring frameworkWiring = frameworkBundle.adapt(FrameworkWiring.class);
        moduleRefreshed = false;
        FrameworkListener frameworkListener = new FrameworkListener() {

            @Override
            public void frameworkEvent(FrameworkEvent frameworkEvent) {
                synchronized (lock) {
                    moduleRefreshed = frameworkEvent.getType() == FrameworkEvent.PACKAGES_REFRESHED;
                }
            }
        };
        frameworkWiring.refreshBundles(Arrays.asList(bundleToRefresh), frameworkListener);
        waitForPackagesRefreshed();
    } else {
        LOGGER.warn("Module '{}' not present, skipping refresh, but this can indicate of an error", moduleName);
    }
}
Also used : FrameworkEvent(org.osgi.framework.FrameworkEvent) Bundle(org.osgi.framework.Bundle) ResourceBundle(java.util.ResourceBundle) FrameworkWiring(org.osgi.framework.wiring.FrameworkWiring) FrameworkListener(org.osgi.framework.FrameworkListener)

Example 32 with FrameworkWiring

use of org.osgi.framework.wiring.FrameworkWiring in project fuse-karaf by jboss-fuse.

the class PatchServiceImplTest method testLoadWithoutRanges.

@Test
public void testLoadWithoutRanges() throws IOException, GitAPIException {
    BundleContext bundleContext = mock(BundleContext.class);
    ComponentContext componentContext = mock(ComponentContext.class);
    Bundle sysBundle = mock(Bundle.class);
    BundleContext sysBundleContext = mock(BundleContext.class);
    Bundle bundle = mock(Bundle.class);
    Bundle bundle2 = mock(Bundle.class);
    FrameworkWiring wiring = mock(FrameworkWiring.class);
    GitPatchRepository repository = mock(GitPatchRepository.class);
    // 
    // Create a new service, download a patch
    // 
    when(componentContext.getBundleContext()).thenReturn(bundleContext);
    when(bundleContext.getBundle(0)).thenReturn(sysBundle);
    when(sysBundle.getBundleContext()).thenReturn(sysBundleContext);
    when(sysBundleContext.getProperty(PatchService.PATCH_LOCATION)).thenReturn(storage.toString());
    when(repository.getManagedPatch(anyString())).thenReturn(null);
    when(repository.findOrCreateMainGitRepository()).thenReturn(null);
    when(sysBundleContext.getProperty("karaf.default.repository")).thenReturn("system");
    when(sysBundleContext.getProperty("karaf.home")).thenReturn(karaf.getCanonicalPath());
    when(sysBundleContext.getProperty("karaf.base")).thenReturn(karaf.getCanonicalPath());
    when(sysBundleContext.getProperty("karaf.name")).thenReturn("root");
    when(sysBundleContext.getProperty("karaf.instances")).thenReturn(karaf.getCanonicalPath() + "/instances");
    when(sysBundleContext.getProperty("karaf.data")).thenReturn(karaf.getCanonicalPath() + "/data");
    when(sysBundleContext.getProperty("karaf.etc")).thenReturn(karaf.getCanonicalPath() + "/etc");
    PatchManagement pm = new GitPatchManagementServiceImpl(bundleContext);
    ((GitPatchManagementServiceImpl) pm).setGitPatchRepository(repository);
    PatchServiceImpl service = new PatchServiceImpl();
    setField(service, "patchManagement", pm);
    service.activate(componentContext);
    PatchData pd = PatchData.load(getClass().getClassLoader().getResourceAsStream("test1.patch"));
    assertEquals(2, pd.getBundles().size());
    assertTrue(pd.getRequirements().isEmpty());
}
Also used : GitPatchManagementServiceImpl(org.jboss.fuse.patch.management.impl.GitPatchManagementServiceImpl) PatchData(org.jboss.fuse.patch.management.PatchData) ComponentContext(org.osgi.service.component.ComponentContext) Bundle(org.osgi.framework.Bundle) PatchManagement(org.jboss.fuse.patch.management.PatchManagement) GitPatchRepository(org.jboss.fuse.patch.management.impl.GitPatchRepository) FrameworkWiring(org.osgi.framework.wiring.FrameworkWiring) BundleContext(org.osgi.framework.BundleContext) Test(org.junit.Test)

Example 33 with FrameworkWiring

use of org.osgi.framework.wiring.FrameworkWiring in project fuse-karaf by jboss-fuse.

the class PatchServiceImplTest method testPatchWithVersionRanges.

@Test
public void testPatchWithVersionRanges() throws Exception {
    ComponentContext componentContext = mock(ComponentContext.class);
    BundleContext bundleContext = mock(BundleContext.class);
    Bundle sysBundle = mock(Bundle.class);
    BundleContext sysBundleContext = mock(BundleContext.class);
    Bundle bundle = mock(Bundle.class);
    Bundle bundle2 = mock(Bundle.class);
    FrameworkWiring wiring = mock(FrameworkWiring.class);
    GitPatchRepository repository = mock(GitPatchRepository.class);
    // 
    // Create a new service, download a patch
    // 
    when(componentContext.getBundleContext()).thenReturn(bundleContext);
    when(bundleContext.getBundle(0)).thenReturn(sysBundle);
    when(sysBundle.getBundleContext()).thenReturn(sysBundleContext);
    when(sysBundleContext.getProperty(PatchService.PATCH_LOCATION)).thenReturn(storage.toString());
    when(repository.getManagedPatch(anyString())).thenReturn(null);
    when(repository.findOrCreateMainGitRepository()).thenReturn(null);
    when(sysBundleContext.getProperty("karaf.default.repository")).thenReturn("system");
    when(sysBundleContext.getProperty("karaf.home")).thenReturn(karaf.getCanonicalPath());
    when(sysBundleContext.getProperty("karaf.base")).thenReturn(karaf.getCanonicalPath());
    when(sysBundleContext.getProperty("karaf.name")).thenReturn("root");
    when(sysBundleContext.getProperty("karaf.instances")).thenReturn(karaf.getCanonicalPath() + "/instances");
    when(sysBundleContext.getProperty("karaf.data")).thenReturn(karaf.getCanonicalPath() + "/data");
    when(sysBundleContext.getProperty("karaf.etc")).thenReturn(karaf.getCanonicalPath() + "/etc");
    PatchManagement pm = mockManagementService(bundleContext);
    ((GitPatchManagementServiceImpl) pm).setGitPatchRepository(repository);
    PatchServiceImpl service = new PatchServiceImpl();
    setField(service, "patchManagement", pm);
    service.activate(componentContext);
    Iterable<Patch> patches = service.download(patch140.toURI().toURL());
    assertNotNull(patches);
    Iterator<Patch> it = patches.iterator();
    assertTrue(it.hasNext());
    Patch patch = it.next();
    assertNotNull(patch);
    assertEquals("patch-1.4.0", patch.getPatchData().getId());
    assertNotNull(patch.getPatchData().getBundles());
    assertEquals(1, patch.getPatchData().getBundles().size());
    Iterator<String> itb = patch.getPatchData().getBundles().iterator();
    assertEquals("mvn:foo/my-bsn/1.4.0", itb.next());
    assertNull(patch.getResult());
    // 
    // Simulate the patch
    // 
    when(sysBundleContext.getBundles()).thenReturn(new Bundle[] { bundle });
    when(sysBundleContext.getServiceReference("io.fabric8.api.FabricService")).thenReturn(null);
    when(bundle.getSymbolicName()).thenReturn("my-bsn");
    when(bundle.getVersion()).thenReturn(new Version("1.3.1"));
    when(bundle.getLocation()).thenReturn("location");
    when(bundle.getBundleId()).thenReturn(123L);
    BundleStartLevel bsl = mock(BundleStartLevel.class);
    when(bsl.getStartLevel()).thenReturn(30);
    when(bundle.adapt(BundleStartLevel.class)).thenReturn(bsl);
    when(bundle.getState()).thenReturn(1);
    when(sysBundleContext.getProperty("karaf.default.repository")).thenReturn("system");
    PatchResult result = service.install(patch, true);
    assertNotNull(result);
    assertEquals(1, result.getBundleUpdates().size());
    assertTrue(result.isSimulation());
}
Also used : BundleStartLevel(org.osgi.framework.startlevel.BundleStartLevel) ComponentContext(org.osgi.service.component.ComponentContext) Bundle(org.osgi.framework.Bundle) GitPatchRepository(org.jboss.fuse.patch.management.impl.GitPatchRepository) FrameworkWiring(org.osgi.framework.wiring.FrameworkWiring) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) GitPatchManagementServiceImpl(org.jboss.fuse.patch.management.impl.GitPatchManagementServiceImpl) Version(org.osgi.framework.Version) PatchManagement(org.jboss.fuse.patch.management.PatchManagement) PatchResult(org.jboss.fuse.patch.management.PatchResult) Patch(org.jboss.fuse.patch.management.Patch) BundleContext(org.osgi.framework.BundleContext) Test(org.junit.Test)

Example 34 with FrameworkWiring

use of org.osgi.framework.wiring.FrameworkWiring in project fuse-karaf by jboss-fuse.

the class PatchServiceImplTest method testPatch.

@Test
public void testPatch() throws Exception {
    ComponentContext componentContext = mock(ComponentContext.class);
    BundleContext bundleContext = mock(BundleContext.class);
    Bundle sysBundle = mock(Bundle.class);
    BundleContext sysBundleContext = mock(BundleContext.class);
    Bundle bundle = mock(Bundle.class);
    Bundle bundle2 = mock(Bundle.class);
    FrameworkWiring wiring = mock(FrameworkWiring.class);
    GitPatchRepository repository = mock(GitPatchRepository.class);
    // 
    // Create a new service, download a patch
    // 
    when(componentContext.getBundleContext()).thenReturn(bundleContext);
    when(bundleContext.getBundle(0)).thenReturn(sysBundle);
    when(sysBundle.getBundleContext()).thenReturn(sysBundleContext);
    when(sysBundleContext.getProperty(PatchService.PATCH_LOCATION)).thenReturn(storage.toString());
    when(repository.getManagedPatch(anyString())).thenReturn(null);
    when(repository.findOrCreateMainGitRepository()).thenReturn(null);
    when(sysBundleContext.getProperty("karaf.default.repository")).thenReturn("system");
    when(sysBundleContext.getProperty("karaf.home")).thenReturn(karaf.getCanonicalPath());
    when(sysBundleContext.getProperty("karaf.base")).thenReturn(karaf.getCanonicalPath());
    when(sysBundleContext.getProperty("karaf.name")).thenReturn("root");
    when(sysBundleContext.getProperty("karaf.instances")).thenReturn(karaf.getCanonicalPath() + "/instances");
    when(sysBundleContext.getProperty("karaf.data")).thenReturn(karaf.getCanonicalPath() + "/data");
    when(sysBundleContext.getProperty("karaf.etc")).thenReturn(karaf.getCanonicalPath() + "/etc");
    PatchManagement pm = mockManagementService(bundleContext);
    ((GitPatchManagementServiceImpl) pm).setGitPatchRepository(repository);
    PatchServiceImpl service = new PatchServiceImpl();
    setField(service, "patchManagement", pm);
    service.activate(componentContext);
    try {
        service.download(new URL("file:" + storage + "/temp/f00.zip"));
        fail("Should have thrown exception on non existent patch file.");
    } catch (Exception ignored) {
    }
    Iterable<Patch> patches = service.download(patch132.toURI().toURL());
    assertNotNull(patches);
    Iterator<Patch> it = patches.iterator();
    assertTrue(it.hasNext());
    Patch patch = it.next();
    assertNotNull(patch);
    assertEquals("patch-1.3.2", patch.getPatchData().getId());
    assertNotNull(patch.getPatchData().getBundles());
    assertEquals(1, patch.getPatchData().getBundles().size());
    Iterator<String> itb = patch.getPatchData().getBundles().iterator();
    assertEquals("mvn:foo/my-bsn/1.3.2", itb.next());
    assertNull(patch.getResult());
    // 
    // Simulate the patch
    // 
    when(sysBundleContext.getBundles()).thenReturn(new Bundle[] { bundle });
    when(sysBundleContext.getServiceReference("io.fabric8.api.FabricService")).thenReturn(null);
    when(bundle.getSymbolicName()).thenReturn("my-bsn");
    when(bundle.getVersion()).thenReturn(new Version("1.3.1"));
    when(bundle.getLocation()).thenReturn("location");
    when(bundle.getBundleId()).thenReturn(123L);
    BundleStartLevel bsl = mock(BundleStartLevel.class);
    when(bsl.getStartLevel()).thenReturn(30);
    when(bundle.adapt(BundleStartLevel.class)).thenReturn(bsl);
    when(bundle.getState()).thenReturn(1);
    when(sysBundleContext.getProperty("karaf.default.repository")).thenReturn("system");
    PatchResult result = service.install(patch, true);
    assertNotNull(result);
    assertTrue(result.isSimulation());
    // 
    // Recreate a new service and verify the downloaded patch is still available
    // 
    when(componentContext.getBundleContext()).thenReturn(bundleContext);
    when(bundleContext.getBundle(0)).thenReturn(sysBundle);
    when(sysBundle.getBundleContext()).thenReturn(sysBundleContext);
    when(sysBundleContext.getProperty(PatchService.PATCH_LOCATION)).thenReturn(storage.toString());
    when(sysBundleContext.getProperty("karaf.home")).thenReturn(karaf.toString());
    when(sysBundleContext.getProperty("karaf.base")).thenReturn(karaf.getCanonicalPath());
    when(sysBundleContext.getProperty("karaf.name")).thenReturn("root");
    when(sysBundleContext.getProperty("karaf.instances")).thenReturn(karaf.getCanonicalPath() + "/instances");
    when(sysBundleContext.getProperty("karaf.default.repository")).thenReturn("system");
    when(sysBundleContext.getProperty("karaf.etc")).thenReturn(karaf.getCanonicalPath() + "/etc");
    when(repository.getManagedPatch(anyString())).thenReturn(null);
    when(repository.findOrCreateMainGitRepository()).thenReturn(null);
    service = new PatchServiceImpl();
    setField(service, "patchManagement", pm);
    service.activate(componentContext);
    patches = service.getPatches();
    assertNotNull(patches);
    it = patches.iterator();
    assertTrue(it.hasNext());
    patch = it.next();
    assertNotNull(patch);
    assertEquals("patch-1.3.2", patch.getPatchData().getId());
    assertNotNull(patch.getPatchData().getBundles());
    assertEquals(1, patch.getPatchData().getBundles().size());
    itb = patch.getPatchData().getBundles().iterator();
    assertEquals("mvn:foo/my-bsn/1.3.2", itb.next());
    assertNull(patch.getResult());
    // 
    // Install the patch
    // 
    when(sysBundleContext.getBundles()).thenReturn(new Bundle[] { bundle });
    when(sysBundleContext.getServiceReference("io.fabric8.api.FabricService")).thenReturn(null);
    when(bundle.getSymbolicName()).thenReturn("my-bsn");
    when(bundle.getVersion()).thenReturn(new Version("1.3.1"));
    when(bundle.getLocation()).thenReturn("location");
    when(bundle.getHeaders()).thenReturn(new Hashtable<String, String>());
    when(bundle.getBundleId()).thenReturn(123L);
    bundle.update(any(InputStream.class));
    when(sysBundleContext.getBundles()).thenReturn(new Bundle[] { bundle });
    when(bundle.getState()).thenReturn(Bundle.INSTALLED);
    when(bundle.getRegisteredServices()).thenReturn(null);
    when(bundle.adapt(BundleStartLevel.class)).thenReturn(bsl);
    when(bsl.getStartLevel()).thenReturn(30);
    when(sysBundleContext.getBundle(0)).thenReturn(sysBundle);
    when(sysBundle.adapt(FrameworkWiring.class)).thenReturn(wiring);
    when(sysBundleContext.getProperty("karaf.default.repository")).thenReturn("system");
    bundle.start();
    doAnswer(invocationOnMock -> {
        ((FrameworkListener) invocationOnMock.getArgument(1)).frameworkEvent(null);
        return invocationOnMock.getMock();
    }).when(wiring).refreshBundles(any(), any(FrameworkListener.class));
    result = service.install(patch, false);
    assertNotNull(result);
    assertSame(result, patch.getResult());
    assertFalse(patch.getResult().isSimulation());
    // 
    // Recreate a new service and verify the downloaded patch is still available and installed
    // 
    when(componentContext.getBundleContext()).thenReturn(bundleContext);
    when(bundleContext.getBundle(0)).thenReturn(sysBundle);
    when(sysBundle.getBundleContext()).thenReturn(sysBundleContext);
    when(repository.getManagedPatch(anyString())).thenReturn(null);
    when(sysBundleContext.getProperty(PatchService.PATCH_LOCATION)).thenReturn(storage.toString());
    when(sysBundleContext.getProperty("karaf.home")).thenReturn(karaf.toString());
    when(sysBundleContext.getProperty("karaf.base")).thenReturn(karaf.getCanonicalPath());
    when(sysBundleContext.getProperty("karaf.name")).thenReturn("root");
    when(sysBundleContext.getProperty("karaf.instances")).thenReturn(karaf.getCanonicalPath() + "/instances");
    when(sysBundleContext.getProperty("karaf.default.repository")).thenReturn("system");
    when(sysBundleContext.getProperty("karaf.etc")).thenReturn(karaf.getCanonicalPath() + "/etc");
    service = new PatchServiceImpl();
    setField(service, "patchManagement", pm);
    service.activate(componentContext);
    patches = service.getPatches();
    assertNotNull(patches);
    it = patches.iterator();
    assertTrue(it.hasNext());
    patch = it.next();
    assertNotNull(patch);
    assertEquals("patch-1.3.2", patch.getPatchData().getId());
    assertNotNull(patch.getPatchData().getBundles());
    assertEquals(1, patch.getPatchData().getBundles().size());
    itb = patch.getPatchData().getBundles().iterator();
    assertEquals("mvn:foo/my-bsn/1.3.2", itb.next());
    assertNotNull(patch.getResult());
}
Also used : BundleStartLevel(org.osgi.framework.startlevel.BundleStartLevel) ComponentContext(org.osgi.service.component.ComponentContext) Bundle(org.osgi.framework.Bundle) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) GitPatchRepository(org.jboss.fuse.patch.management.impl.GitPatchRepository) FrameworkWiring(org.osgi.framework.wiring.FrameworkWiring) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) URL(java.net.URL) PatchException(org.jboss.fuse.patch.management.PatchException) GitAPIException(org.eclipse.jgit.api.errors.GitAPIException) IOException(java.io.IOException) GitPatchManagementServiceImpl(org.jboss.fuse.patch.management.impl.GitPatchManagementServiceImpl) Version(org.osgi.framework.Version) PatchManagement(org.jboss.fuse.patch.management.PatchManagement) PatchResult(org.jboss.fuse.patch.management.PatchResult) FrameworkListener(org.osgi.framework.FrameworkListener) Patch(org.jboss.fuse.patch.management.Patch) BundleContext(org.osgi.framework.BundleContext) Test(org.junit.Test)

Example 35 with FrameworkWiring

use of org.osgi.framework.wiring.FrameworkWiring in project aries by apache.

the class Framework method getRemovalPendingBundles.

/**
 * @see org.osgi.jmx.framework.FrameworkMBean#getRemovalPendingBundles()
 */
public long[] getRemovalPendingBundles() throws IOException {
    FrameworkWiring fw = context.getBundle(0).adapt(FrameworkWiring.class);
    Collection<Bundle> rc = fw.getRemovalPendingBundles();
    Iterator<Bundle> it = rc.iterator();
    long[] result = new long[rc.size()];
    for (int i = 0; i < result.length; i++) {
        result[i] = it.next().getBundleId();
    }
    return result;
}
Also used : Bundle(org.osgi.framework.Bundle) FrameworkWiring(org.osgi.framework.wiring.FrameworkWiring)

Aggregations

FrameworkWiring (org.osgi.framework.wiring.FrameworkWiring)39 Bundle (org.osgi.framework.Bundle)29 Test (org.junit.Test)12 URL (java.net.URL)10 FrameworkListener (org.osgi.framework.FrameworkListener)10 CountDownLatch (java.util.concurrent.CountDownLatch)8 IOException (java.io.IOException)7 ArrayList (java.util.ArrayList)7 BundleContext (org.osgi.framework.BundleContext)7 HashSet (java.util.HashSet)6 FrameworkEvent (org.osgi.framework.FrameworkEvent)6 Version (org.osgi.framework.Version)6 HashMap (java.util.HashMap)5 ComponentContext (org.osgi.service.component.ComponentContext)5 InputStream (java.io.InputStream)4 BundleStartLevel (org.osgi.framework.startlevel.BundleStartLevel)4 PatchManagement (io.fabric8.patch.management.PatchManagement)3 GitPatchManagementServiceImpl (io.fabric8.patch.management.impl.GitPatchManagementServiceImpl)3 GitPatchRepository (io.fabric8.patch.management.impl.GitPatchRepository)3 FileInputStream (java.io.FileInputStream)3