Introduce OSGi sub framework with shared class loaders
[lgpl/argeo-commons.git] / org.argeo.init / src / org / argeo / init / RuntimeManagerMain.java
index 7a3f781391f9fd72e02424fb807ff63a5ae4a025..f4ed507c07b37229cd73b8ccbd376deadcef8f22 100644 (file)
@@ -17,11 +17,10 @@ import org.argeo.api.init.InitConstants;
 import org.argeo.api.init.RuntimeContext;
 import org.argeo.api.init.RuntimeManager;
 import org.argeo.init.logging.ThinLoggerFinder;
+import org.argeo.init.osgi.OsgiBoot;
 import org.argeo.init.osgi.OsgiRuntimeContext;
 import org.argeo.internal.init.InternalState;
-import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
 import org.osgi.framework.FrameworkEvent;
 import org.osgi.framework.launch.Framework;
 
@@ -59,18 +58,6 @@ public class RuntimeManagerMain implements RuntimeManager {
        }
 
        public void run() {
-//             try {
-//                     for (Path p : Files.newDirectoryStream(Paths.get("/usr/local/lib/a2"), "*.so")) {
-//                             try {
-//                                     System.load(p.toString());
-//                             } catch (UnsatisfiedLinkError e) {
-//                                     e.printStackTrace();
-//                             }
-//                     }
-//             } catch (IOException e) {
-//                     e.printStackTrace();
-//             }
-
                OsgiRuntimeContext managerRuntimeContext = new OsgiRuntimeContext(configuration);
                try {
                        managerRuntimeContext.run();
@@ -81,16 +68,12 @@ public class RuntimeManagerMain implements RuntimeManager {
 
                        BundleContext bc = managerRuntimeContext.getFramework().getBundleContext();
                        // uninstall init as a bundle since it will be available via OSGi system
-                       for (Bundle b : bc.getBundles()) {
-                               if (b.getSymbolicName().equals(SYMBOLIC_NAME_INIT)) {
-                                       b.uninstall();
-                               }
-                       }
+                       OsgiBoot.uninstallBundles(bc, SYMBOLIC_NAME_INIT);
                        bc.registerService(RuntimeManager.class, this, new Hashtable<>(configuration));
                        logger.log(Level.DEBUG, "Registered runtime manager");
 
                        managerRuntimeContext.waitForStop(0);
-               } catch (InterruptedException | BundleException e) {
+               } catch (InterruptedException e) {
                        e.printStackTrace();
                        System.exit(1);
                }
@@ -149,21 +132,6 @@ public class RuntimeManagerMain implements RuntimeManager {
                OsgiRuntimeContext runtimeContext = loadRuntime(relPath, configCallback);
                runtimeContext.run();
                Framework framework = runtimeContext.getFramework();
-
-//             for (Bundle b : framework.getBundleContext().getBundles()) {
-//                     try {
-////                           if (b.getSymbolicName().startsWith("org.eclipse.swt.gtk")) {
-////                                   b.uninstall();
-////                           }
-////                           else if (b.getSymbolicName().startsWith("org.eclipse.jface")) {
-////                                   b.uninstall();
-////                           }
-//                     } catch (Exception e) {
-//                             // TODO Auto-generated catch block
-//                             e.printStackTrace();
-//                     }
-//             }
-
                if (framework != null) {// in case the framework has closed very quickly after run
                        framework.getBundleContext().addFrameworkListener((e) -> {
                                if (e.getType() >= FrameworkEvent.STOPPED) {