Merge tag 'v2.3.28' into testing
[lgpl/argeo-commons.git] / org.argeo.init / src / org / argeo / init / osgi / NodeRunner.java
diff --git a/org.argeo.init/src/org/argeo/init/osgi/NodeRunner.java b/org.argeo.init/src/org/argeo/init/osgi/NodeRunner.java
deleted file mode 100644 (file)
index 3369650..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-package org.argeo.init.osgi;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-import java.util.ServiceLoader;
-
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.launch.Framework;
-import org.osgi.framework.launch.FrameworkFactory;
-
-/** Launch an OSGi framework and deploy a CMS Node into it. */
-public class NodeRunner {
-       private Long timeout = 30 * 1000l;
-       private final Path baseDir;
-       private final Path confDir;
-       private final Path dataDir;
-
-       private String baseUrl = "http://forge.argeo.org/data/java/argeo-2.1/";
-       private String distributionUrl = null;
-
-       private Framework framework = null;
-
-       public NodeRunner(String distributionUrl, Path baseDir) {
-               this.distributionUrl = distributionUrl;
-               Path mavenBase = Paths.get(System.getProperty("user.home") + "/.m2/repository");
-               Path osgiBase = Paths.get("/user/share/osgi");
-               if (Files.exists(mavenBase)) {
-                       Path mavenPath = mavenBase.resolve(distributionUrl);
-                       if (Files.exists(mavenPath))
-                               baseUrl = mavenBase.toUri().toString();
-               } else if (Files.exists(osgiBase)) {
-                       Path osgiPath = osgiBase.resolve(distributionUrl);
-                       if (Files.exists(osgiPath))
-                               baseUrl = osgiBase.toUri().toString();
-               }
-
-               this.baseDir = baseDir;
-               this.confDir = this.baseDir.resolve("state");
-               this.dataDir = this.baseDir.resolve("data");
-
-       }
-
-       public void start() {
-               long begin = System.currentTimeMillis();
-               // log4j
-               Path log4jFile = confDir.resolve("log4j.properties");
-               if (!Files.exists(log4jFile))
-                       copyResource("/org/argeo/osgi/boot/log4j.properties", log4jFile);
-               System.setProperty("log4j.configuration", "file://" + log4jFile.toAbsolutePath());
-
-               // Start Equinox
-               try {
-                       ServiceLoader<FrameworkFactory> ff = ServiceLoader.load(FrameworkFactory.class);
-                       FrameworkFactory frameworkFactory = ff.iterator().next();
-                       Map<String, String> configuration = new HashMap<String, String>();
-                       configuration.put("osgi.configuration.area", confDir.toAbsolutePath().toString());
-                       configuration.put("osgi.instance.area", dataDir.toAbsolutePath().toString());
-                       defaultConfiguration(configuration);
-
-                       framework = frameworkFactory.newFramework(configuration);
-                       framework.start();
-                       info("## Date : " + new Date());
-                       info("## Data : " + dataDir.toAbsolutePath());
-               } catch (Exception e) {
-                       throw new IllegalStateException("Cannot start OSGi framework", e);
-               }
-               BundleContext bundleContext = framework.getBundleContext();
-               try {
-
-                       // Spring configs currently require System properties
-                       // System.getProperties().putAll(configuration);
-
-                       // expected by JAAS as System.property FIXME
-                       System.setProperty("osgi.instance.area", bundleContext.getProperty("osgi.instance.area"));
-
-                       // OSGi bootstrap
-                       OsgiBoot osgiBoot = new OsgiBoot(bundleContext);
-
-                       osgiBoot.installUrls(osgiBoot.getDistributionUrls(distributionUrl, baseUrl));
-
-                       // Start runtime
-                       Properties startProperties = new Properties();
-                       // TODO make it possible to override it
-                       startProperties.put("argeo.osgi.start.2.node",
-                                       "org.eclipse.equinox.http.servlet,org.eclipse.equinox.http.jetty,"
-                                                       + "org.eclipse.equinox.metatype,org.eclipse.equinox.cm,org.eclipse.rap.rwt.osgi");
-                       startProperties.put("argeo.osgi.start.3.node", "org.argeo.cms");
-                       startProperties.put("argeo.osgi.start.4.node",
-                                       "org.eclipse.gemini.blueprint.extender,org.eclipse.equinox.http.registry");
-                       osgiBoot.startBundles(startProperties);
-
-                       // Find node repository
-                       ServiceReference<?> sr = null;
-                       while (sr == null) {
-                               sr = bundleContext.getServiceReference("javax.jcr.Repository");
-                               if (System.currentTimeMillis() - begin > timeout)
-                                       throw new RuntimeException("Could find node after " + timeout + "ms");
-                               Thread.sleep(100);
-                       }
-                       Object nodeDeployment = bundleContext.getService(sr);
-                       info("Node Deployment " + nodeDeployment);
-
-                       // Initialization completed
-                       long duration = System.currentTimeMillis() - begin;
-                       info("## CMS Launcher initialized in " + (duration / 1000) + "s " + (duration % 1000) + "ms");
-               } catch (Exception e) {
-                       shutdown();
-                       throw new RuntimeException("Cannot start CMS", e);
-               } finally {
-
-               }
-       }
-
-       private void defaultConfiguration(Map<String, String> configuration) {
-               // all permissions to OSGi security manager
-               Path policyFile = confDir.resolve("node.policy");
-               if (!Files.exists(policyFile))
-                       copyResource("/org/argeo/osgi/boot/node.policy", policyFile);
-               configuration.put("java.security.policy", "file://" + policyFile.toAbsolutePath());
-
-               configuration.put("org.eclipse.rap.workbenchAutostart", "false");
-               configuration.put("org.eclipse.equinox.http.jetty.autostart", "false");
-               configuration.put("org.osgi.framework.bootdelegation",
-                               "com.sun.jndi.ldap,com.sun.jndi.ldap.sasl,com.sun.security.jgss,com.sun.jndi.dns,"
-                                               + "com.sun.nio.file,com.sun.nio.sctp");
-
-               // Do clean
-               // configuration.put("osgi.clean", "true");
-               // if (args.length == 0) {
-               // configuration.put("osgi.console", "");
-               // }
-       }
-
-       public void shutdown() {
-               try {
-                       framework.stop();
-                       framework.waitForStop(15 * 1000);
-               } catch (Exception silent) {
-               }
-       }
-
-       public Path getConfDir() {
-               return confDir;
-       }
-
-       public Path getDataDir() {
-               return dataDir;
-       }
-
-       public Framework getFramework() {
-               return framework;
-       }
-
-       public static void main(String[] args) {
-               try {
-                       String distributionUrl;
-                       Path executionDir;
-                       if (args.length == 2) {
-                               distributionUrl = args[0];
-                               executionDir = Paths.get(args[1]);
-                       } else if (args.length == 1) {
-                               executionDir = Paths.get(System.getProperty("user.dir"));
-                               distributionUrl = args[0];
-                       } else if (args.length == 0) {
-                               executionDir = Paths.get(System.getProperty("user.dir"));
-                               distributionUrl = "org/argeo/commons/org.argeo.dep.cms.sdk/2.1.70/org.argeo.dep.cms.sdk-2.1.70.jar";
-                       }else{
-                               printUsage();
-                               System.exit(1);
-                               return;
-                       }
-
-                       NodeRunner nodeRunner = new NodeRunner(distributionUrl, executionDir);
-                       nodeRunner.start();
-//                     if (args.length != 0)
-//                             System.exit(0);
-               } catch (Exception e) {
-                       e.printStackTrace();
-                       System.exit(1);
-               }
-       }
-
-       protected static void info(Object msg) {
-               System.out.println(msg);
-       }
-
-       protected static void err(Object msg) {
-               System.err.println(msg);
-       }
-
-       protected static void debug(Object msg) {
-               System.out.println(msg);
-       }
-
-       protected static void copyResource(String resource, Path targetFile) {
-               InputStream input = null;
-               OutputStream output = null;
-               try {
-                       input = NodeRunner.class.getResourceAsStream(resource);
-                       Files.createDirectories(targetFile.getParent());
-                       output = Files.newOutputStream(targetFile);
-                       byte[] buf = new byte[8192];
-                       while (true) {
-                               int length = input.read(buf);
-                               if (length < 0)
-                                       break;
-                               output.write(buf, 0, length);
-                       }
-               } catch (Exception e) {
-                       throw new RuntimeException("Cannot write " + resource + " file to " + targetFile, e);
-               } finally {
-                       try {
-                               input.close();
-                       } catch (Exception ignore) {
-                       }
-                       try {
-                               output.close();
-                       } catch (Exception ignore) {
-                       }
-               }
-
-       }
-
-       static void printUsage(){
-               err("Usage: <distribution url> <base dir>");
-       }
-}