Search in sources :

Example 1 with MiniFramework

use of aQute.launcher.minifw.MiniFramework in project bnd by bndtools.

the class Launcher method createFramework.

private Framework createFramework() throws Exception {
    Properties p = new Properties();
    p.putAll(properties);
    File workingdir = null;
    if (parms.storageDir != null)
        workingdir = parms.storageDir;
    else if (parms.keep && parms.name != null) {
        workingdir = new File(bnd, parms.name);
    }
    if (workingdir == null) {
        workingdir = File.createTempFile("osgi.", ".fw");
        final File wd = workingdir;
        Runtime.getRuntime().addShutdownHook(new Thread("launcher::delete temp working dir") {

            public void run() {
                deleteFiles(wd);
            }
        });
    }
    trace("using working dir: %s with keeping=%s", workingdir, parms.keep);
    if (!parms.keep && workingdir.exists()) {
        trace("deleting working dir %s because not kept", workingdir);
        delete(workingdir);
        p.setProperty(Constants.FRAMEWORK_STORAGE_CLEAN, "true");
    }
    IO.mkdirs(workingdir);
    if (!workingdir.isDirectory())
        throw new IllegalArgumentException("Cannot create a working dir: " + workingdir);
    if (System.getProperty(Constants.FRAMEWORK_STORAGE) == null)
        p.setProperty(Constants.FRAMEWORK_STORAGE, workingdir.getAbsolutePath());
    else
        p.setProperty(Constants.FRAMEWORK_STORAGE, System.getProperty(Constants.FRAMEWORK_STORAGE));
    if (parms.systemPackages != null) {
        p.setProperty(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, parms.systemPackages);
        trace("system packages used: %s", parms.systemPackages);
    }
    if (parms.systemCapabilities != null) {
        p.setProperty(FRAMEWORK_SYSTEM_CAPABILITIES_EXTRA, parms.systemCapabilities);
        trace("system capabilities used: %s", parms.systemCapabilities);
    }
    Framework systemBundle;
    if (parms.services) {
        trace("using META-INF/services");
        // 3) framework = null, lookup in META-INF/services
        ClassLoader loader = getClass().getClassLoader();
        // 3) Lookup in META-INF/services
        List<String> implementations = getMetaInfServices(loader, FrameworkFactory.class.getName());
        if (implementations.size() == 0)
            error("Found no fw implementation");
        if (implementations.size() > 1)
            error("Found more than one framework implementations: %s", implementations);
        String implementation = implementations.get(0);
        Class<?> clazz = loader.loadClass(implementation);
        FrameworkFactory factory = (FrameworkFactory) clazz.getConstructor().newInstance();
        trace("Framework factory %s", factory);
        @SuppressWarnings({ "unchecked", "rawtypes" }) Map<String, String> configuration = (Map) p;
        systemBundle = factory.newFramework(configuration);
        trace("framework instance %s", systemBundle);
    } else {
        trace("using embedded mini framework because we were told not to use META-INF/services");
        // we have to use our own dummy framework
        systemBundle = new MiniFramework(p);
    }
    systemBundle.init();
    try {
        systemBundle.getBundleContext().addFrameworkListener(new FrameworkListener() {

            public void frameworkEvent(FrameworkEvent event) {
                switch(event.getType()) {
                    case FrameworkEvent.ERROR:
                    case FrameworkEvent.WAIT_TIMEDOUT:
                        trace("Refresh will end due to error or timeout %s", event.toString());
                    case FrameworkEvent.PACKAGES_REFRESHED:
                        inrefresh = false;
                        trace("refresh ended");
                        break;
                }
            }
        });
    } catch (Exception e) {
        trace("could not register a framework listener: %s", e);
    }
    trace("inited system bundle %s", systemBundle);
    return systemBundle;
}
Also used : FrameworkEvent(org.osgi.framework.FrameworkEvent) Properties(java.util.Properties) MiniFramework(aQute.launcher.minifw.MiniFramework) BundleException(org.osgi.framework.BundleException) InvocationTargetException(java.lang.reflect.InvocationTargetException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) IOException(java.io.IOException) FrameworkFactory(org.osgi.framework.launch.FrameworkFactory) FrameworkListener(org.osgi.framework.FrameworkListener) File(java.io.File) Map(java.util.Map) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Framework(org.osgi.framework.launch.Framework) MiniFramework(aQute.launcher.minifw.MiniFramework)

Aggregations

MiniFramework (aQute.launcher.minifw.MiniFramework)1 File (java.io.File)1 IOException (java.io.IOException)1 UnsupportedEncodingException (java.io.UnsupportedEncodingException)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 HashMap (java.util.HashMap)1 LinkedHashMap (java.util.LinkedHashMap)1 Map (java.util.Map)1 Properties (java.util.Properties)1 BundleException (org.osgi.framework.BundleException)1 FrameworkEvent (org.osgi.framework.FrameworkEvent)1 FrameworkListener (org.osgi.framework.FrameworkListener)1 Framework (org.osgi.framework.launch.Framework)1 FrameworkFactory (org.osgi.framework.launch.FrameworkFactory)1