Search in sources :

Example 16 with PackageAdmin

use of org.osgi.service.packageadmin.PackageAdmin in project aries by apache.

the class AriesRepositoryGenerator method startFramework.

/**
   * Start OSGi framework and install the necessary bundles
   * @return
   * @throws BundleException
   */
public BundleContext startFramework() throws BundleException {
    ServiceLoader<FrameworkFactory> factoryLoader = ServiceLoader.load(FrameworkFactory.class, getClass().getClassLoader());
    Iterator<FrameworkFactory> factoryIterator = factoryLoader.iterator();
    //Map<String, String> osgiPropertyMap = new HashMap<String, String>();
    if (!!!factoryIterator.hasNext()) {
        System.out.println("Unable to locate the osgi jar");
    }
    try {
        FrameworkFactory frameworkFactory = factoryIterator.next();
        framework = frameworkFactory.newFramework(Collections.EMPTY_MAP);
    } catch (ServiceConfigurationError sce) {
        sce.printStackTrace();
    }
    framework.init();
    framework.start();
    // install the bundles in the current directory
    Collection<Bundle> installedBundles = new ArrayList<Bundle>();
    File bundleDir = new File(".");
    File[] jars = bundleDir.listFiles();
    try {
        for (File jar : jars) {
            if (jar.isFile() && (jar.getName().endsWith(".jar"))) {
                String location = URLDecoder.decode(jar.toURI().toURL().toExternalForm(), "UTF-8");
                if (shouldInstall(location, getIgnoreList())) {
                    installedBundles.add(framework.getBundleContext().installBundle("reference:" + location));
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    ServiceReference paRef = framework.getBundleContext().getServiceReference(PackageAdmin.class.getCanonicalName());
    if (paRef != null) {
        try {
            PackageAdmin admin = (PackageAdmin) framework.getBundleContext().getService(paRef);
            admin.resolveBundles(installedBundles.toArray(new Bundle[installedBundles.size()]));
        } finally {
            framework.getBundleContext().ungetService(paRef);
        }
    } else {
        System.out.println("Unable to find the service reference for package admin");
    }
    //loop through the list of installed bundles to start them
    for (Bundle bundle : installedBundles) {
        try {
            if (bundle.getHeaders().get(Constants.FRAGMENT_HOST) == null) {
                //start the bundle using its activiation policy
                bundle.start(Bundle.START_ACTIVATION_POLICY);
            } else {
            //nothing to start, we have got a fragment
            }
        } catch (BundleException e) {
            e.printStackTrace();
            continue;
        }
    }
    return framework.getBundleContext();
}
Also used : Bundle(org.osgi.framework.Bundle) ArrayList(java.util.ArrayList) ServiceConfigurationError(java.util.ServiceConfigurationError) BundleException(org.osgi.framework.BundleException) InvalidSyntaxException(org.osgi.framework.InvalidSyntaxException) IOException(java.io.IOException) FrameworkFactory(org.osgi.framework.launch.FrameworkFactory) ServiceReference(org.osgi.framework.ServiceReference) PackageAdmin(org.osgi.service.packageadmin.PackageAdmin) BundleException(org.osgi.framework.BundleException) File(java.io.File)

Example 17 with PackageAdmin

use of org.osgi.service.packageadmin.PackageAdmin in project aries by apache.

the class BundleDataTest method testToCompositeData.

@Test
public void testToCompositeData() throws Exception {
    Bundle bundle = mock(Bundle.class);
    BundleContext context = mock(BundleContext.class);
    PackageAdmin packageAdmin = mock(PackageAdmin.class);
    StartLevel startLevel = mock(StartLevel.class);
    Bundle b1 = mock(Bundle.class);
    when(b1.getSymbolicName()).thenReturn("b1");
    when(b1.getBundleId()).thenReturn(new Long(44));
    Bundle b2 = mock(Bundle.class);
    when(b2.getSymbolicName()).thenReturn("b2");
    when(b2.getBundleId()).thenReturn(new Long(55));
    Bundle b3 = mock(Bundle.class);
    when(b3.getSymbolicName()).thenReturn("b3");
    when(b3.getBundleId()).thenReturn(new Long(66));
    when(context.getBundles()).thenReturn(new Bundle[] { bundle, b1, b2, b3 });
    when(bundle.getSymbolicName()).thenReturn("test");
    when(bundle.getVersion()).thenReturn(Version.emptyVersion);
    when(bundle.getBundleId()).thenReturn(new Long(1));
    when(bundle.getLastModified()).thenReturn(new Long(12345));
    when(bundle.getLocation()).thenReturn("location");
    //headers
    Dictionary<String, String> headers = new Hashtable<String, String>();
    headers.put(Constants.BUNDLE_SYMBOLICNAME, "test");
    headers.put(Constants.BUNDLE_VERSION, "0.0.0");
    when(bundle.getHeaders()).thenReturn(headers);
    //exported packages
    ExportedPackage exported = mock(ExportedPackage.class);
    when(exported.getName()).thenReturn("org.apache.aries.jmx");
    when(exported.getVersion()).thenReturn(new Version("1.0.0"));
    when(exported.getExportingBundle()).thenReturn(bundle);
    when(packageAdmin.getExportedPackages(bundle)).thenReturn(new ExportedPackage[] { exported });
    //imported packages
    ExportedPackage ep1 = mock(ExportedPackage.class);
    when(ep1.getImportingBundles()).thenReturn(new Bundle[] { bundle, b2, b3 });
    when(ep1.getName()).thenReturn("org.apache.aries.jmx.b1");
    when(ep1.getVersion()).thenReturn(Version.emptyVersion);
    when(ep1.getExportingBundle()).thenReturn(b1);
    ExportedPackage ep2 = mock(ExportedPackage.class);
    when(ep2.getImportingBundles()).thenReturn(new Bundle[] { bundle, b3 });
    when(ep2.getName()).thenReturn("org.apache.aries.jmx.b2");
    when(ep2.getVersion()).thenReturn(Version.parseVersion("2.0.1"));
    when(ep2.getExportingBundle()).thenReturn(b2);
    headers.put(Constants.DYNAMICIMPORT_PACKAGE, "*");
    when(packageAdmin.getExportedPackages(b1)).thenReturn(new ExportedPackage[] { ep1 });
    when(packageAdmin.getExportedPackages(b2)).thenReturn(new ExportedPackage[] { ep2 });
    when(packageAdmin.getExportedPackages(b3)).thenReturn(null);
    //required bundles
    RequiredBundle rb1 = mock(RequiredBundle.class);
    when(rb1.getBundle()).thenReturn(b1);
    when(rb1.getRequiringBundles()).thenReturn(new Bundle[] { bundle, b2 });
    RequiredBundle rb2 = mock(RequiredBundle.class);
    when(rb2.getBundle()).thenReturn(b2);
    when(rb2.getRequiringBundles()).thenReturn(new Bundle[] { b1 });
    RequiredBundle rb3 = mock(RequiredBundle.class);
    when(rb3.getBundle()).thenReturn(b3);
    when(rb3.getRequiringBundles()).thenReturn(new Bundle[] { bundle, b1, b2 });
    headers.put(Constants.REQUIRE_BUNDLE, "b1;bundle-version=\"1.0.0\",b3;bundle-version=\"2.0.0\"");
    when(packageAdmin.getRequiredBundles("b1")).thenReturn(new RequiredBundle[] { rb1 });
    when(packageAdmin.getRequiredBundles("b2")).thenReturn(new RequiredBundle[] { rb2 });
    when(packageAdmin.getRequiredBundles("b3")).thenReturn(new RequiredBundle[] { rb3 });
    //services in use
    ServiceReference s1 = mock(ServiceReference.class);
    when(s1.getProperty(Constants.SERVICE_ID)).thenReturn(new Long(15));
    ServiceReference s2 = mock(ServiceReference.class);
    when(s2.getProperty(Constants.SERVICE_ID)).thenReturn(new Long(16));
    ServiceReference s3 = mock(ServiceReference.class);
    when(s3.getProperty(Constants.SERVICE_ID)).thenReturn(new Long(17));
    when(bundle.getServicesInUse()).thenReturn(new ServiceReference[] { s1, s2, s3 });
    BundleData b = new BundleData(context, bundle, packageAdmin, startLevel);
    CompositeData compositeData = b.toCompositeData();
    assertEquals("test", compositeData.get(SYMBOLIC_NAME));
    assertEquals("0.0.0", compositeData.get(VERSION));
    TabularData headerTable = (TabularData) compositeData.get(HEADERS);
    assertEquals(4, headerTable.values().size());
    CompositeData header = headerTable.get(new Object[] { Constants.BUNDLE_SYMBOLICNAME });
    assertNotNull(header);
    String value = (String) header.get(VALUE);
    assertEquals("test", value);
    String key = (String) header.get(KEY);
    assertEquals(Constants.BUNDLE_SYMBOLICNAME, key);
    TabularData bundleTable = new TabularDataSupport(BUNDLES_TYPE);
    bundleTable.put(b.toCompositeData());
    CompositeData bundleData = bundleTable.get(new Object[] { Long.valueOf(1) });
    assertNotNull(bundleData);
    String location = (String) bundleData.get(LOCATION);
    assertEquals("location", location);
    assertArrayEquals(new String[] { "org.apache.aries.jmx;1.0.0" }, (String[]) compositeData.get(EXPORTED_PACKAGES));
    assertArrayEquals(new String[] { "org.apache.aries.jmx.b1;0.0.0", "org.apache.aries.jmx.b2;2.0.1" }, (String[]) compositeData.get(IMPORTED_PACKAGES));
    assertEquals(toSet(new long[] { 44, 55, 66 }), toSet((Long[]) compositeData.get(REQUIRED_BUNDLES)));
    assertArrayEquals(new Long[] { new Long(15), new Long(16), new Long(17) }, (Long[]) compositeData.get(SERVICES_IN_USE));
    //default no return stub
    assertEquals("UNKNOWN", compositeData.get(STATE));
    assertEquals(0, ((Long[]) compositeData.get(HOSTS)).length);
    assertEquals(0, ((Long[]) compositeData.get(FRAGMENTS)).length);
}
Also used : Bundle(org.osgi.framework.Bundle) RequiredBundle(org.osgi.service.packageadmin.RequiredBundle) Hashtable(java.util.Hashtable) CompositeData(javax.management.openmbean.CompositeData) RequiredBundle(org.osgi.service.packageadmin.RequiredBundle) ServiceReference(org.osgi.framework.ServiceReference) TabularData(javax.management.openmbean.TabularData) PackageAdmin(org.osgi.service.packageadmin.PackageAdmin) Version(org.osgi.framework.Version) ExportedPackage(org.osgi.service.packageadmin.ExportedPackage) TabularDataSupport(javax.management.openmbean.TabularDataSupport) StartLevel(org.osgi.service.startlevel.StartLevel) BundleContext(org.osgi.framework.BundleContext) Test(org.junit.Test)

Example 18 with PackageAdmin

use of org.osgi.service.packageadmin.PackageAdmin in project aries by apache.

the class FrameworkUtilsTest method testIsBundleRequiredByOthers.

@Test
public void testIsBundleRequiredByOthers() throws Exception {
    Bundle bundle = mock(Bundle.class);
    when(bundle.getSymbolicName()).thenReturn("org.apache.testb");
    RequiredBundle reqBundle = mock(RequiredBundle.class);
    when(reqBundle.getBundle()).thenReturn(bundle);
    when(reqBundle.getRequiringBundles()).thenReturn(new Bundle[0]);
    PackageAdmin admin = mock(PackageAdmin.class);
    when(admin.getRequiredBundles("org.apache.testb")).thenReturn(new RequiredBundle[] { reqBundle });
    assertFalse(isBundleRequiredByOthers(bundle, admin));
    Bundle user = mock(Bundle.class);
    when(reqBundle.getRequiringBundles()).thenReturn(new Bundle[] { user });
    assertTrue(isBundleRequiredByOthers(bundle, admin));
}
Also used : PackageAdmin(org.osgi.service.packageadmin.PackageAdmin) FrameworkUtils.getServicesInUseByBundle(org.apache.aries.jmx.util.FrameworkUtils.getServicesInUseByBundle) Bundle(org.osgi.framework.Bundle) RequiredBundle(org.osgi.service.packageadmin.RequiredBundle) RequiredBundle(org.osgi.service.packageadmin.RequiredBundle) Test(org.junit.Test)

Example 19 with PackageAdmin

use of org.osgi.service.packageadmin.PackageAdmin in project aries by apache.

the class FrameworkUtilsTest method testGetBundleDependencies.

@Test
public void testGetBundleDependencies() throws Exception {
    Bundle bundle = mock(Bundle.class);
    BundleContext context = mock(BundleContext.class);
    Bundle b1 = mock(Bundle.class);
    when(b1.getSymbolicName()).thenReturn("b1");
    when(b1.getBundleId()).thenReturn(new Long(44));
    Bundle b2 = mock(Bundle.class);
    when(b2.getSymbolicName()).thenReturn("b2");
    when(b2.getBundleId()).thenReturn(new Long(55));
    Bundle b3 = mock(Bundle.class);
    when(b3.getSymbolicName()).thenReturn("b3");
    when(b3.getBundleId()).thenReturn(new Long(66));
    when(context.getBundles()).thenReturn(new Bundle[] { bundle, b1, b2, b3 });
    Dictionary<String, String> headers = new Hashtable<String, String>();
    when(bundle.getHeaders()).thenReturn(headers);
    PackageAdmin admin = mock(PackageAdmin.class);
    assertEquals(0, getBundleDependencies(context, bundle, admin).length);
    RequiredBundle rb1 = mock(RequiredBundle.class);
    when(rb1.getBundle()).thenReturn(b1);
    when(rb1.getRequiringBundles()).thenReturn(new Bundle[] { bundle, b2 });
    RequiredBundle rb2 = mock(RequiredBundle.class);
    when(rb2.getBundle()).thenReturn(b2);
    when(rb2.getRequiringBundles()).thenReturn(new Bundle[] { b1 });
    RequiredBundle rb3 = mock(RequiredBundle.class);
    when(rb3.getBundle()).thenReturn(b3);
    when(rb3.getRequiringBundles()).thenReturn(new Bundle[] { bundle, b1, b2 });
    headers.put(Constants.REQUIRE_BUNDLE, "b1;bundle-version=\"1.0.0\",b3;bundle-version=\"2.0.0\"");
    when(admin.getRequiredBundles("b1")).thenReturn(new RequiredBundle[] { rb1 });
    when(admin.getRequiredBundles("b2")).thenReturn(new RequiredBundle[] { rb2 });
    when(admin.getRequiredBundles("b3")).thenReturn(new RequiredBundle[] { rb3 });
    assertEquals(toSet(new long[] { 44, 66 }), toSet(getBundleDependencies(context, bundle, admin)));
}
Also used : PackageAdmin(org.osgi.service.packageadmin.PackageAdmin) FrameworkUtils.getServicesInUseByBundle(org.apache.aries.jmx.util.FrameworkUtils.getServicesInUseByBundle) Bundle(org.osgi.framework.Bundle) RequiredBundle(org.osgi.service.packageadmin.RequiredBundle) Hashtable(java.util.Hashtable) Matchers.anyString(org.mockito.Matchers.anyString) BundleContext(org.osgi.framework.BundleContext) RequiredBundle(org.osgi.service.packageadmin.RequiredBundle) Test(org.junit.Test)

Example 20 with PackageAdmin

use of org.osgi.service.packageadmin.PackageAdmin in project aries by apache.

the class FrameworkUtilsTest method testGetBundleExportedPackages.

@Test
public void testGetBundleExportedPackages() throws Exception {
    Bundle bundle = mock(Bundle.class);
    PackageAdmin admin = mock(PackageAdmin.class);
    assertEquals(0, getBundleExportedPackages(bundle, admin).length);
    ExportedPackage exported = mock(ExportedPackage.class);
    when(exported.getName()).thenReturn("org.apache.aries.jmx");
    when(exported.getVersion()).thenReturn(new Version("1.0.0"));
    when(admin.getExportedPackages(bundle)).thenReturn(new ExportedPackage[] { exported });
    assertArrayEquals(new String[] { "org.apache.aries.jmx;1.0.0" }, getBundleExportedPackages(bundle, admin));
}
Also used : PackageAdmin(org.osgi.service.packageadmin.PackageAdmin) Version(org.osgi.framework.Version) FrameworkUtils.getServicesInUseByBundle(org.apache.aries.jmx.util.FrameworkUtils.getServicesInUseByBundle) Bundle(org.osgi.framework.Bundle) RequiredBundle(org.osgi.service.packageadmin.RequiredBundle) ExportedPackage(org.osgi.service.packageadmin.ExportedPackage) Test(org.junit.Test)

Aggregations

PackageAdmin (org.osgi.service.packageadmin.PackageAdmin)27 Bundle (org.osgi.framework.Bundle)17 BundleContext (org.osgi.framework.BundleContext)13 ServiceReference (org.osgi.framework.ServiceReference)12 Test (org.junit.Test)11 ExportedPackage (org.osgi.service.packageadmin.ExportedPackage)7 RequiredBundle (org.osgi.service.packageadmin.RequiredBundle)6 StartLevel (org.osgi.service.startlevel.StartLevel)6 FrameworkUtils.getServicesInUseByBundle (org.apache.aries.jmx.util.FrameworkUtils.getServicesInUseByBundle)5 ArrayList (java.util.ArrayList)4 Version (org.osgi.framework.Version)4 IOException (java.io.IOException)3 Hashtable (java.util.Hashtable)3 NotCompliantMBeanException (javax.management.NotCompliantMBeanException)3 Logger (org.apache.aries.jmx.Logger)3 Expectations (org.jmock.Expectations)3 InvalidSyntaxException (org.osgi.framework.InvalidSyntaxException)3 File (java.io.File)2 ExecutorService (java.util.concurrent.ExecutorService)2 MBeanServer (javax.management.MBeanServer)2