From: Mathieu Baudier Date: Thu, 7 Mar 2024 18:45:49 +0000 (+0100) Subject: Move SLC Init activator to SLC Runtime X-Git-Tag: v2.3.15~8 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=67ac344052752622d4bd3e59c4f88c2bc9f6d3b6;p=gpl%2Fargeo-slc.git Move SLC Init activator to SLC Runtime --- diff --git a/org.argeo.slc.cms/bnd.bnd b/org.argeo.slc.cms/bnd.bnd index 737ccf8cd..5decbd1fc 100644 --- a/org.argeo.slc.cms/bnd.bnd +++ b/org.argeo.slc.cms/bnd.bnd @@ -1,6 +1,4 @@ -Bundle-Activator: org.argeo.slc.init.osgi.SlcInitActivator - Import-Package: \ org.apache.commons.logging,\ org.postgresql;version="[42,43)";resolution:=optional,\ diff --git a/org.argeo.slc.cms/build.properties b/org.argeo.slc.cms/build.properties index 5d082eaf6..34d2e4d2d 100644 --- a/org.argeo.slc.cms/build.properties +++ b/org.argeo.slc.cms/build.properties @@ -2,4 +2,3 @@ source.. = src/ output.. = bin/ bin.includes = META-INF/,\ . -additional.bundles = org.argeo.init diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsDeployedSystem.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsDeployedSystem.java deleted file mode 100644 index feec64f18..000000000 --- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsDeployedSystem.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.argeo.slc.cms.deploy; - -import org.argeo.slc.deploy.DeployedSystem; - -public interface CmsDeployedSystem extends DeployedSystem { - -} diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsDeploymentData.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsDeploymentData.java deleted file mode 100644 index 17cecd829..000000000 --- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsDeploymentData.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.argeo.slc.cms.deploy; - -import java.util.List; - -import org.argeo.slc.deploy.DeploymentData; - -public interface CmsDeploymentData extends DeploymentData { - List getModulesToActivate(int startLevel); -} diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsTargetData.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsTargetData.java deleted file mode 100644 index 8e8d147ce..000000000 --- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/CmsTargetData.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.argeo.slc.cms.deploy; - -import java.nio.file.Path; - -import org.argeo.slc.deploy.TargetData; - -public interface CmsTargetData extends TargetData { - Path getInstanceData(); - - String getHost(); - - Integer getHttpPort(); - -} diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/SimpleCmsDeploymentData.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/SimpleCmsDeploymentData.java deleted file mode 100644 index c95f441e7..000000000 --- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/SimpleCmsDeploymentData.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.argeo.slc.cms.deploy; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -public class SimpleCmsDeploymentData implements CmsDeploymentData { - private Map> startLevels = new TreeMap<>(); - - @Override - public List getModulesToActivate(int startLevel) { - startLevels.putIfAbsent(startLevel, new ArrayList<>()); - return startLevels.get(startLevel); - } - -} diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/SimpleCmsTargetData.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/SimpleCmsTargetData.java deleted file mode 100644 index 081fb899e..000000000 --- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/SimpleCmsTargetData.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.argeo.slc.cms.deploy; - -import java.nio.file.Path; - -public class SimpleCmsTargetData implements CmsTargetData { - private Path instanceData; - private String host; - private Integer httpPort; - - public SimpleCmsTargetData(Path instanceData, String host, Integer httpPort) { - this.instanceData = instanceData; - this.host = host; - this.httpPort = httpPort; - } - - public String getHost() { - return host; - } - - public void setHost(String hostname) { - this.host = hostname; - } - - public Integer getHttpPort() { - return httpPort; - } - - public void setHttpPort(Integer httpPort) { - this.httpPort = httpPort; - } - - public Path getInstanceData() { - return instanceData; - } - - public void setInstanceData(Path instanceData) { - this.instanceData = instanceData; - } - -} diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployedSystem.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployedSystem.java deleted file mode 100644 index 25d57b897..000000000 --- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployedSystem.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.argeo.slc.cms.deploy.osgi; - -import org.argeo.slc.build.Distribution; -import org.argeo.slc.build.ModularDistribution; -import org.argeo.slc.cms.deploy.CmsDeployedSystem; -import org.argeo.slc.cms.deploy.CmsDeploymentData; -import org.argeo.slc.cms.deploy.CmsTargetData; -import org.argeo.slc.deploy.DeploymentData; -import org.argeo.slc.deploy.TargetData; -import org.osgi.framework.BundleContext; - -/** A deployed OSGi-based Argeo CMS system. */ -public class OsgiCmsDeployedSystem implements CmsDeployedSystem { - private ModularDistribution distribution; - private CmsTargetData targetData; - private CmsDeploymentData deploymentData; - - // private BundleContext systemBundleContext; - - public OsgiCmsDeployedSystem(BundleContext systemBundleContext, ModularDistribution distribution, - CmsTargetData targetData, CmsDeploymentData deploymentData) { - // this.systemBundleContext = systemBundleContext; - - this.distribution = distribution; - this.targetData = targetData; - this.deploymentData = deploymentData; - } - - @Override - public String getDeployedSystemId() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Distribution getDistribution() { - return distribution; - } - - @Override - public DeploymentData getDeploymentData() { - return deploymentData; - } - - @Override - public TargetData getTargetData() { - return targetData; - } - -} diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployment.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployment.java deleted file mode 100644 index 1c472e70f..000000000 --- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployment.java +++ /dev/null @@ -1,228 +0,0 @@ -package org.argeo.slc.cms.deploy.osgi; - -import java.io.IOException; -import java.lang.System.Logger; -import java.lang.System.Logger.Level; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.StringJoiner; -import java.util.TreeMap; - -import org.argeo.api.a2.A2Source; -import org.argeo.api.a2.FsA2Source; -import org.argeo.api.init.InitConstants; -import org.argeo.api.init.RuntimeContext; -import org.argeo.cms.CmsDeployProperty; -import org.argeo.init.osgi.OsgiRuntimeContext; -import org.argeo.slc.WellKnownConstants; -import org.argeo.slc.build.Distribution; -import org.argeo.slc.cms.deploy.CmsDeployedSystem; -import org.argeo.slc.cms.deploy.CmsDeploymentData; -import org.argeo.slc.cms.deploy.CmsTargetData; -import org.argeo.slc.cms.deploy.SimpleCmsDeploymentData; -import org.argeo.slc.cms.distribution.A2Distribution; -import org.argeo.slc.deploy.DeployedSystem; -import org.argeo.slc.deploy.Deployment; -import org.argeo.slc.deploy.DeploymentData; -import org.argeo.slc.deploy.TargetData; - -/** The process of deploying an OSGi based Argeo CMS system. */ -public class OsgiCmsDeployment implements Deployment { - private final static Logger logger = System.getLogger(OsgiCmsDeployment.class.getName()); - - private A2Distribution distribution; - private CmsTargetData targetData; - private CmsDeploymentData deploymentData; - - private CmsDeployedSystem deployedSystem; - - private OsgiRuntimeContext runtimeContext; - - @Override - public void run() { - try { - Map config = new TreeMap<>(); - - // sources - StringJoiner sourcesProperty = new StringJoiner(","); - for (A2Source a2Source : distribution.getA2Sources()) { - sourcesProperty.add(a2Source.getUri().toString()); - } - config.put(InitConstants.PROP_ARGEO_OSGI_SOURCES, sourcesProperty.toString()); - - // target - config.put(WellKnownConstants.OSGI_INSTANCE_AREA, - targetData.getInstanceData().toRealPath().toUri().toString()); - - if (targetData.getHost() != null) { - config.put(CmsDeployProperty.HOST.getProperty(), targetData.getHost().toString()); - } - - if (targetData.getHttpPort() != null) { - config.put(CmsDeployProperty.HTTP_PORT.getProperty(), targetData.getHttpPort().toString()); - } - - Path configurationArea = Files.createTempDirectory("slc-cms-test"); - config.put(WellKnownConstants.OSGI_CONFIGURATION_AREA, configurationArea.toUri().toString()); - - // modules activation - for (int startLevel = 0; startLevel <= 6; startLevel++) { - List modules = deploymentData.getModulesToActivate(startLevel); - if (modules.size() != 0) { - String startProperty = String.join(",", modules); - config.put(InitConstants.PROP_ARGEO_OSGI_START + "." + startLevel, startProperty); - } - } - - config.put("org.eclipse.equinox.http.jetty.autostart", "false"); - config.put("org.osgi.framework.system.packages.extra", - "sun.security.util,sun.security.internal.spec,sun.security.provider,com.sun.net.httpserver,com.sun.jndi.ldap,com.sun.jndi.ldap.sasl,com.sun.jndi.dns,com.sun.security.jgss,com.sun.nio.file,com.sun.nio.sctp"); - config.put("eclipse.ignoreApp", "true"); - config.put("osgi.noShutdown", "true"); - config.put("osgi.clean", "true"); - config.put("osgi.framework.useSystemProperties", "false"); - - config.put("argeo.directory", "dc=example,dc=com.ldif"); - - if (targetData instanceof OsgiCmsTargetData osgiCmsTargetData - && osgiCmsTargetData.getTelnetPort() != null) { - String hostStr = ""; - if (targetData.getHost() != null) { - hostStr = targetData.getHost().toString() + ":"; - } - config.put("osgi.console", hostStr + osgiCmsTargetData.getTelnetPort().toString()); - } - - // initialise - for (String key : config.keySet()) { -// System.out.println(key + "=" + config.get(key)); - logger.log(Level.TRACE, () -> key + "=" + config.get(key)); - } - - // FIXME use runtime manager - runtimeContext = new OsgiRuntimeContext(config); - runtimeContext.run(); - -// deployedSystem = new OsgiCmsDeployedSystem(runtimeContext.getFramework().getBundleContext(), distribution, -// targetData, deploymentData); - - } catch (Exception e) { - throw new IllegalStateException("Cannot run OSGi deployment", e); - } - - } - - @Override - public DeployedSystem getDeployedSystem() { - return deployedSystem; - } - - @Override - public void setTargetData(TargetData targetData) { - this.targetData = (CmsTargetData) targetData; - } - - @Override - public void setDeploymentData(DeploymentData deploymentData) { - this.deploymentData = (CmsDeploymentData) deploymentData; - } - - @Override - public void setDistribution(Distribution distribution) { - this.distribution = (A2Distribution) distribution; - } - - public OsgiRuntimeContext getRuntimeContext() { - return runtimeContext; - } - - public static void main(String[] args) { - RuntimeContext runtimeContext = test(); - try { - runtimeContext.waitForStop(0); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - public static RuntimeContext test() { - try { - Path userHome = Paths.get(System.getProperty("user.home")); - - // distribution - Path a2Base = userHome.resolve("dev/git/unstable/output/a2"); - A2Distribution distribution = new A2Distribution(); - Map xOr = new HashMap<>(); - xOr.put("osgi", "equinox"); - xOr.put("swt", "rap"); - xOr.put("log", "syslogger"); - xOr.put("crypto", "fips"); - distribution.getA2Sources().add(new FsA2Source(a2Base, xOr, true, null, null)); - - // target data - Path instanceData = userHome.resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment/data"); - Files.createDirectories(instanceData); - OsgiCmsTargetData targetData = new OsgiCmsTargetData(instanceData, "host1", 7070, 2323); - - // deployment data - SimpleCmsDeploymentData deploymentData = new SimpleCmsDeploymentData(); - deploymentData.getModulesToActivate(2).add("org.eclipse.equinox.http.servlet"); - deploymentData.getModulesToActivate(2).add("org.apache.felix.scr"); - deploymentData.getModulesToActivate(2).add("org.eclipse.rap.rwt.osgi"); - deploymentData.getModulesToActivate(2).add("org.eclipse.equinox.console"); - - deploymentData.getModulesToActivate(3).add("org.argeo.cms"); - deploymentData.getModulesToActivate(3).add("org.argeo.cms.ee"); - deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.sshd"); - deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.equinox"); - deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.jetty"); - deploymentData.getModulesToActivate(3).add("org.argeo.cms.swt.rap"); - - deploymentData.getModulesToActivate(4).add("org.argeo.cms.jcr"); - deploymentData.getModulesToActivate(4).add("org.argeo.app.profile.acr.fs"); - - deploymentData.getModulesToActivate(5).add("org.argeo.app.core"); - deploymentData.getModulesToActivate(5).add("org.argeo.app.ui"); - deploymentData.getModulesToActivate(5).add("org.argeo.app.theme.default"); - deploymentData.getModulesToActivate(5).add("org.argeo.app.jcr"); - - deploymentData.getModulesToActivate(5).add("org.example.suite.theme"); - deploymentData.getModulesToActivate(5).add("org.example.suite.core"); - deploymentData.getModulesToActivate(5).add("org.example.suite.ui"); - deploymentData.getModulesToActivate(5).add("org.example.suite.ui.rap"); - - OsgiCmsDeployment deployment = new OsgiCmsDeployment(); - deployment.setDistribution(distribution); - deployment.setTargetData(targetData); - deployment.setDeploymentData(deploymentData); - deployment.run(); - - boolean multiple = true; - if (multiple) { - // wait a bit -// Thread.sleep(5000); - - Path instanceData2 = userHome.resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment2/data"); - Files.createDirectories(instanceData2); - OsgiCmsTargetData targetData2 = new OsgiCmsTargetData(instanceData2, "host2", 7070, 2323); - - OsgiCmsDeployment deployment2 = new OsgiCmsDeployment(); - deployment2.setDistribution(distribution); - deployment2.setTargetData(targetData2); - deployment2.setDeploymentData(deploymentData); - deployment2.run(); - } - - return deployment.getRuntimeContext(); - } catch (IOException e) { - e.printStackTrace(); - System.exit(1); - return null; - } - } - -} diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsTargetData.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsTargetData.java deleted file mode 100644 index dc4bf3b1d..000000000 --- a/org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsTargetData.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.argeo.slc.cms.deploy.osgi; - -import java.nio.file.Path; - -import org.argeo.slc.cms.deploy.SimpleCmsTargetData; - -public class OsgiCmsTargetData extends SimpleCmsTargetData { - private Integer telnetPort; - - public OsgiCmsTargetData(Path instanceData, String host, Integer httpPort, Integer telnetPort) { - super(instanceData, host, httpPort); - this.telnetPort = telnetPort; - } - - public Integer getTelnetPort() { - return telnetPort; - } - - public void setTelnetPort(Integer telnetPort) { - this.telnetPort = telnetPort; - } - -} diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/distribution/A2Distribution.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/distribution/A2Distribution.java deleted file mode 100644 index 435d2d6f5..000000000 --- a/org.argeo.slc.cms/src/org/argeo/slc/cms/distribution/A2Distribution.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.argeo.slc.cms.distribution; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.argeo.api.a2.A2Branch; -import org.argeo.api.a2.A2Component; -import org.argeo.api.a2.A2Contribution; -import org.argeo.api.a2.A2Module; -import org.argeo.api.a2.A2Source; -import org.argeo.slc.CategoryNameVersion; -import org.argeo.slc.DefaultCategoryNameVersion; -import org.argeo.slc.NameVersion; -import org.argeo.slc.build.Distribution; -import org.argeo.slc.build.ModularDistribution; - -public class A2Distribution implements ModularDistribution { - private List a2Sources = new ArrayList<>(); - - @Override - public String getDistributionId() { - // TODO Auto-generated method stub - return null; - } - - @Override - public String getName() { - // TODO Auto-generated method stub - return null; - } - - @Override - public String getVersion() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Iterator nameVersions() { - List nameVersions = new ArrayList<>(); - for (A2Source a2Source : a2Sources) { - for (A2Contribution a2Contribution : a2Source.listContributions(null)) { - for (A2Component a2Component : a2Contribution.listComponents(null)) { - for (A2Branch a2Branch : a2Component.listBranches(null)) { - for (A2Module a2Module : a2Branch.listModules(null)) { - CategoryNameVersion nameVersion = new DefaultCategoryNameVersion(a2Contribution.getId(), - a2Component.getId(), a2Module.getVersion().toString()); - nameVersions.add(nameVersion); - } - } - } - } - } - return nameVersions.iterator(); - } - - @Override - public Distribution getModuleDistribution(String moduleName, String moduleVersion) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Object getModulesDescriptor(String descriptorType) { - // TODO Auto-generated method stub - return null; - } - - public List getA2Sources() { - return a2Sources; - } - - -} diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/distribution/A2ModuleDistribution.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/distribution/A2ModuleDistribution.java deleted file mode 100644 index 9e90bce8f..000000000 --- a/org.argeo.slc.cms/src/org/argeo/slc/cms/distribution/A2ModuleDistribution.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.argeo.slc.cms.distribution; - -import org.argeo.api.a2.A2Module; -import org.argeo.slc.build.Distribution; - -public class A2ModuleDistribution implements Distribution { - private A2Module a2Module; - - @Override - public String getDistributionId() { - return a2Module.getCoordinates(); - } - -} diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/test/CmsSmokeTest.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/test/CmsSmokeTest.java deleted file mode 100644 index 10b088c53..000000000 --- a/org.argeo.slc.cms/src/org/argeo/slc/cms/test/CmsSmokeTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.argeo.slc.cms.test; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -public class CmsSmokeTest { - - public static void main(String[] args) throws IOException { - Path instanceData; - if (args.length > 0) { - instanceData = Paths.get(args[0]); - } else { - instanceData = Files.createTempDirectory("cms-test"); - } - - } - -} diff --git a/org.argeo.slc.cms/src/org/argeo/slc/cms/test/MinimalJvm.java b/org.argeo.slc.cms/src/org/argeo/slc/cms/test/MinimalJvm.java deleted file mode 100644 index 87eefd954..000000000 --- a/org.argeo.slc.cms/src/org/argeo/slc/cms/test/MinimalJvm.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.argeo.slc.cms.test; - -/** - * A program doing nothing and loading no classes, to be used as a baseline for - * memory usage of the JVM. - */ -public class MinimalJvm { - - synchronized void sleep() { - try { - wait(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - public static void main(String[] args) { - new MinimalJvm().sleep(); - } - -} diff --git a/org.argeo.slc.cms/src/org/argeo/slc/init/osgi/SlcInitActivator.java b/org.argeo.slc.cms/src/org/argeo/slc/init/osgi/SlcInitActivator.java deleted file mode 100644 index 542aac91c..000000000 --- a/org.argeo.slc.cms/src/org/argeo/slc/init/osgi/SlcInitActivator.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.argeo.slc.init.osgi; - -import java.nio.file.Path; -import java.nio.file.Paths; - -import org.argeo.api.cms.CmsLog; -import org.argeo.api.init.RuntimeManager; -import org.argeo.cms.CmsDeployProperty; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.osgi.util.tracker.ServiceTracker; - -public class SlcInitActivator implements BundleActivator { - private final static CmsLog log = CmsLog.getLog(SlcInitActivator.class); - - private ServiceTracker runtimeManagerSt; - - @Override - public void start(BundleContext context) throws Exception { - Path userHome = Paths.get(System.getProperty("user.home")); - -// { -// EquinoxFactory equinoxFactory = new EquinoxFactory(); -// Map config = new HashMap<>(); -// config.put("osgi.console", "host1:2023"); -// config.put("osgi.frameworkParentClassloader", "app"); -// config.put("osgi.parentClassLoader", "app"); -// RuntimeManager.loadConfig(Paths.get("/usr/local/etc/argeo/user/cms/test3"), config); -// Framework framework = equinoxFactory.newFramework(config); -// framework.start(); -// OsgiBoot osgiBoot = new OsgiBoot(framework.getBundleContext()); -// osgiBoot.bootstrap(config); -// } - - // OsgiCmsDeployment.test(); - - runtimeManagerSt = new ServiceTracker<>(context, RuntimeManager.class, null) { - - @Override - public RuntimeManager addingService(ServiceReference reference) { - RuntimeManager runtimeManager = super.addingService(reference); - log.debug("Found runtime manager " + runtimeManager); - new Thread() { - public void run() { -// try { -// Thread.sleep(5000); -// } catch (InterruptedException e) { -// return; -// } - - runtimeManager.startRuntime("native/test1", (config) -> { - config.put("osgi.console", "host1:2023"); - config.put(CmsDeployProperty.SSHD_PORT.getProperty(), "2222"); - config.put(CmsDeployProperty.HTTP_PORT.getProperty(), "7070"); - config.put(CmsDeployProperty.HOST.getProperty(), "host1"); -// for (String key : config.keySet()) { -// System.out.println(key + "=" + config.get(key)); -//// log.debug(() -> key + "=" + config.get(key)); -// } -// config.put("argeo.osgi.start.6", "org.argeo.swt.minidesktop"); - }); - runtimeManager.startRuntime("native/test2", (config) -> { - config.put("osgi.console", "host2:2023"); - config.put(CmsDeployProperty.SSHD_PORT.getProperty(), "2222"); - // config.put(CmsDeployProperty.HTTP_PORT.getProperty(), "7070"); - config.put(CmsDeployProperty.HOST.getProperty(), "host2"); -// config.put("argeo.osgi.start.6", "org.argeo.swt.minidesktop"); -//// config.put("argeo.directory", "ipa:///"); -// Path instanceData = userHome -// .resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment/data"); -// config.put(InitConstants.PROP_OSGI_INSTANCE_AREA, instanceData.toUri().toString()); - }); - } - }.start(); - - return runtimeManager; - } - - }; - runtimeManagerSt.open(false); - } - - @Override - public void stop(BundleContext context) throws Exception { - } - -} diff --git a/org.argeo.slc.runtime/bnd.bnd b/org.argeo.slc.runtime/bnd.bnd index 6956a159b..263e792e0 100644 --- a/org.argeo.slc.runtime/bnd.bnd +++ b/org.argeo.slc.runtime/bnd.bnd @@ -1,3 +1,5 @@ +Bundle-Activator: org.argeo.slc.internal.runtime.osgi.SlcInitActivator + Import-Package: \ org.argeo.slc.deploy,\ org.apache.commons.exec.*;resolution:=optional,\ diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsDeployedSystem.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsDeployedSystem.java new file mode 100644 index 000000000..feec64f18 --- /dev/null +++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsDeployedSystem.java @@ -0,0 +1,7 @@ +package org.argeo.slc.cms.deploy; + +import org.argeo.slc.deploy.DeployedSystem; + +public interface CmsDeployedSystem extends DeployedSystem { + +} diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsDeploymentData.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsDeploymentData.java new file mode 100644 index 000000000..17cecd829 --- /dev/null +++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsDeploymentData.java @@ -0,0 +1,9 @@ +package org.argeo.slc.cms.deploy; + +import java.util.List; + +import org.argeo.slc.deploy.DeploymentData; + +public interface CmsDeploymentData extends DeploymentData { + List getModulesToActivate(int startLevel); +} diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsTargetData.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsTargetData.java new file mode 100644 index 000000000..8e8d147ce --- /dev/null +++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/CmsTargetData.java @@ -0,0 +1,14 @@ +package org.argeo.slc.cms.deploy; + +import java.nio.file.Path; + +import org.argeo.slc.deploy.TargetData; + +public interface CmsTargetData extends TargetData { + Path getInstanceData(); + + String getHost(); + + Integer getHttpPort(); + +} diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/SimpleCmsDeploymentData.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/SimpleCmsDeploymentData.java new file mode 100644 index 000000000..c95f441e7 --- /dev/null +++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/SimpleCmsDeploymentData.java @@ -0,0 +1,17 @@ +package org.argeo.slc.cms.deploy; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +public class SimpleCmsDeploymentData implements CmsDeploymentData { + private Map> startLevels = new TreeMap<>(); + + @Override + public List getModulesToActivate(int startLevel) { + startLevels.putIfAbsent(startLevel, new ArrayList<>()); + return startLevels.get(startLevel); + } + +} diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/SimpleCmsTargetData.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/SimpleCmsTargetData.java new file mode 100644 index 000000000..081fb899e --- /dev/null +++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/SimpleCmsTargetData.java @@ -0,0 +1,40 @@ +package org.argeo.slc.cms.deploy; + +import java.nio.file.Path; + +public class SimpleCmsTargetData implements CmsTargetData { + private Path instanceData; + private String host; + private Integer httpPort; + + public SimpleCmsTargetData(Path instanceData, String host, Integer httpPort) { + this.instanceData = instanceData; + this.host = host; + this.httpPort = httpPort; + } + + public String getHost() { + return host; + } + + public void setHost(String hostname) { + this.host = hostname; + } + + public Integer getHttpPort() { + return httpPort; + } + + public void setHttpPort(Integer httpPort) { + this.httpPort = httpPort; + } + + public Path getInstanceData() { + return instanceData; + } + + public void setInstanceData(Path instanceData) { + this.instanceData = instanceData; + } + +} diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployedSystem.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployedSystem.java new file mode 100644 index 000000000..25d57b897 --- /dev/null +++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployedSystem.java @@ -0,0 +1,50 @@ +package org.argeo.slc.cms.deploy.osgi; + +import org.argeo.slc.build.Distribution; +import org.argeo.slc.build.ModularDistribution; +import org.argeo.slc.cms.deploy.CmsDeployedSystem; +import org.argeo.slc.cms.deploy.CmsDeploymentData; +import org.argeo.slc.cms.deploy.CmsTargetData; +import org.argeo.slc.deploy.DeploymentData; +import org.argeo.slc.deploy.TargetData; +import org.osgi.framework.BundleContext; + +/** A deployed OSGi-based Argeo CMS system. */ +public class OsgiCmsDeployedSystem implements CmsDeployedSystem { + private ModularDistribution distribution; + private CmsTargetData targetData; + private CmsDeploymentData deploymentData; + + // private BundleContext systemBundleContext; + + public OsgiCmsDeployedSystem(BundleContext systemBundleContext, ModularDistribution distribution, + CmsTargetData targetData, CmsDeploymentData deploymentData) { + // this.systemBundleContext = systemBundleContext; + + this.distribution = distribution; + this.targetData = targetData; + this.deploymentData = deploymentData; + } + + @Override + public String getDeployedSystemId() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Distribution getDistribution() { + return distribution; + } + + @Override + public DeploymentData getDeploymentData() { + return deploymentData; + } + + @Override + public TargetData getTargetData() { + return targetData; + } + +} diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployment.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployment.java new file mode 100644 index 000000000..f6e55caef --- /dev/null +++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployment.java @@ -0,0 +1,227 @@ +package org.argeo.slc.cms.deploy.osgi; + +import java.io.IOException; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.StringJoiner; +import java.util.TreeMap; + +import org.argeo.api.a2.A2Source; +import org.argeo.api.a2.FsA2Source; +import org.argeo.api.init.InitConstants; +import org.argeo.api.init.RuntimeContext; +import org.argeo.init.osgi.OsgiRuntimeContext; +import org.argeo.slc.WellKnownConstants; +import org.argeo.slc.build.Distribution; +import org.argeo.slc.cms.deploy.CmsDeployedSystem; +import org.argeo.slc.cms.deploy.CmsDeploymentData; +import org.argeo.slc.cms.deploy.CmsTargetData; +import org.argeo.slc.cms.deploy.SimpleCmsDeploymentData; +import org.argeo.slc.cms.distribution.A2Distribution; +import org.argeo.slc.deploy.DeployedSystem; +import org.argeo.slc.deploy.Deployment; +import org.argeo.slc.deploy.DeploymentData; +import org.argeo.slc.deploy.TargetData; + +/** The process of deploying an OSGi based Argeo CMS system. */ +public class OsgiCmsDeployment implements Deployment { + private final static Logger logger = System.getLogger(OsgiCmsDeployment.class.getName()); + + private A2Distribution distribution; + private CmsTargetData targetData; + private CmsDeploymentData deploymentData; + + private CmsDeployedSystem deployedSystem; + + private OsgiRuntimeContext runtimeContext; + + @Override + public void run() { + try { + Map config = new TreeMap<>(); + + // sources + StringJoiner sourcesProperty = new StringJoiner(","); + for (A2Source a2Source : distribution.getA2Sources()) { + sourcesProperty.add(a2Source.getUri().toString()); + } + config.put(InitConstants.PROP_ARGEO_OSGI_SOURCES, sourcesProperty.toString()); + + // target + config.put(WellKnownConstants.OSGI_INSTANCE_AREA, + targetData.getInstanceData().toRealPath().toUri().toString()); + + if (targetData.getHost() != null) { + config.put("argeo.host", targetData.getHost().toString()); + } + + if (targetData.getHttpPort() != null) { + config.put("argeo.http.port", targetData.getHttpPort().toString()); + } + + Path configurationArea = Files.createTempDirectory("slc-cms-test"); + config.put(WellKnownConstants.OSGI_CONFIGURATION_AREA, configurationArea.toUri().toString()); + + // modules activation + for (int startLevel = 0; startLevel <= 6; startLevel++) { + List modules = deploymentData.getModulesToActivate(startLevel); + if (modules.size() != 0) { + String startProperty = String.join(",", modules); + config.put(InitConstants.PROP_ARGEO_OSGI_START + "." + startLevel, startProperty); + } + } + + config.put("org.eclipse.equinox.http.jetty.autostart", "false"); + config.put("org.osgi.framework.system.packages.extra", + "sun.security.util,sun.security.internal.spec,sun.security.provider,com.sun.net.httpserver,com.sun.jndi.ldap,com.sun.jndi.ldap.sasl,com.sun.jndi.dns,com.sun.security.jgss,com.sun.nio.file,com.sun.nio.sctp"); + config.put("eclipse.ignoreApp", "true"); + config.put("osgi.noShutdown", "true"); + config.put("osgi.clean", "true"); + config.put("osgi.framework.useSystemProperties", "false"); + + config.put("argeo.directory", "dc=example,dc=com.ldif"); + + if (targetData instanceof OsgiCmsTargetData osgiCmsTargetData + && osgiCmsTargetData.getTelnetPort() != null) { + String hostStr = ""; + if (targetData.getHost() != null) { + hostStr = targetData.getHost().toString() + ":"; + } + config.put("osgi.console", hostStr + osgiCmsTargetData.getTelnetPort().toString()); + } + + // initialise + for (String key : config.keySet()) { +// System.out.println(key + "=" + config.get(key)); + logger.log(Level.TRACE, () -> key + "=" + config.get(key)); + } + + // FIXME use runtime manager + runtimeContext = new OsgiRuntimeContext(config); + runtimeContext.run(); + +// deployedSystem = new OsgiCmsDeployedSystem(runtimeContext.getFramework().getBundleContext(), distribution, +// targetData, deploymentData); + + } catch (Exception e) { + throw new IllegalStateException("Cannot run OSGi deployment", e); + } + + } + + @Override + public DeployedSystem getDeployedSystem() { + return deployedSystem; + } + + @Override + public void setTargetData(TargetData targetData) { + this.targetData = (CmsTargetData) targetData; + } + + @Override + public void setDeploymentData(DeploymentData deploymentData) { + this.deploymentData = (CmsDeploymentData) deploymentData; + } + + @Override + public void setDistribution(Distribution distribution) { + this.distribution = (A2Distribution) distribution; + } + + public OsgiRuntimeContext getRuntimeContext() { + return runtimeContext; + } + + public static void main(String[] args) { + RuntimeContext runtimeContext = test(); + try { + runtimeContext.waitForStop(0); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public static RuntimeContext test() { + try { + Path userHome = Paths.get(System.getProperty("user.home")); + + // distribution + Path a2Base = userHome.resolve("dev/git/unstable/output/a2"); + A2Distribution distribution = new A2Distribution(); + Map xOr = new HashMap<>(); + xOr.put("osgi", "equinox"); + xOr.put("swt", "rap"); + xOr.put("log", "syslogger"); + xOr.put("crypto", "fips"); + distribution.getA2Sources().add(new FsA2Source(a2Base, xOr, true, null, null)); + + // target data + Path instanceData = userHome.resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment/data"); + Files.createDirectories(instanceData); + OsgiCmsTargetData targetData = new OsgiCmsTargetData(instanceData, "host1", 7070, 2323); + + // deployment data + SimpleCmsDeploymentData deploymentData = new SimpleCmsDeploymentData(); + deploymentData.getModulesToActivate(2).add("org.eclipse.equinox.http.servlet"); + deploymentData.getModulesToActivate(2).add("org.apache.felix.scr"); + deploymentData.getModulesToActivate(2).add("org.eclipse.rap.rwt.osgi"); + deploymentData.getModulesToActivate(2).add("org.eclipse.equinox.console"); + + deploymentData.getModulesToActivate(3).add("org.argeo.cms"); + deploymentData.getModulesToActivate(3).add("org.argeo.cms.ee"); + deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.sshd"); + deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.equinox"); + deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.jetty"); + deploymentData.getModulesToActivate(3).add("org.argeo.cms.swt.rap"); + + deploymentData.getModulesToActivate(4).add("org.argeo.cms.jcr"); + deploymentData.getModulesToActivate(4).add("org.argeo.app.profile.acr.fs"); + + deploymentData.getModulesToActivate(5).add("org.argeo.app.core"); + deploymentData.getModulesToActivate(5).add("org.argeo.app.ui"); + deploymentData.getModulesToActivate(5).add("org.argeo.app.theme.default"); + deploymentData.getModulesToActivate(5).add("org.argeo.app.jcr"); + + deploymentData.getModulesToActivate(5).add("org.example.suite.theme"); + deploymentData.getModulesToActivate(5).add("org.example.suite.core"); + deploymentData.getModulesToActivate(5).add("org.example.suite.ui"); + deploymentData.getModulesToActivate(5).add("org.example.suite.ui.rap"); + + OsgiCmsDeployment deployment = new OsgiCmsDeployment(); + deployment.setDistribution(distribution); + deployment.setTargetData(targetData); + deployment.setDeploymentData(deploymentData); + deployment.run(); + + boolean multiple = true; + if (multiple) { + // wait a bit +// Thread.sleep(5000); + + Path instanceData2 = userHome.resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment2/data"); + Files.createDirectories(instanceData2); + OsgiCmsTargetData targetData2 = new OsgiCmsTargetData(instanceData2, "host2", 7070, 2323); + + OsgiCmsDeployment deployment2 = new OsgiCmsDeployment(); + deployment2.setDistribution(distribution); + deployment2.setTargetData(targetData2); + deployment2.setDeploymentData(deploymentData); + deployment2.run(); + } + + return deployment.getRuntimeContext(); + } catch (IOException e) { + e.printStackTrace(); + System.exit(1); + return null; + } + } + +} diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsTargetData.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsTargetData.java new file mode 100644 index 000000000..dc4bf3b1d --- /dev/null +++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsTargetData.java @@ -0,0 +1,23 @@ +package org.argeo.slc.cms.deploy.osgi; + +import java.nio.file.Path; + +import org.argeo.slc.cms.deploy.SimpleCmsTargetData; + +public class OsgiCmsTargetData extends SimpleCmsTargetData { + private Integer telnetPort; + + public OsgiCmsTargetData(Path instanceData, String host, Integer httpPort, Integer telnetPort) { + super(instanceData, host, httpPort); + this.telnetPort = telnetPort; + } + + public Integer getTelnetPort() { + return telnetPort; + } + + public void setTelnetPort(Integer telnetPort) { + this.telnetPort = telnetPort; + } + +} diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/distribution/A2Distribution.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/distribution/A2Distribution.java new file mode 100644 index 000000000..435d2d6f5 --- /dev/null +++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/distribution/A2Distribution.java @@ -0,0 +1,75 @@ +package org.argeo.slc.cms.distribution; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.argeo.api.a2.A2Branch; +import org.argeo.api.a2.A2Component; +import org.argeo.api.a2.A2Contribution; +import org.argeo.api.a2.A2Module; +import org.argeo.api.a2.A2Source; +import org.argeo.slc.CategoryNameVersion; +import org.argeo.slc.DefaultCategoryNameVersion; +import org.argeo.slc.NameVersion; +import org.argeo.slc.build.Distribution; +import org.argeo.slc.build.ModularDistribution; + +public class A2Distribution implements ModularDistribution { + private List a2Sources = new ArrayList<>(); + + @Override + public String getDistributionId() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getName() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getVersion() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Iterator nameVersions() { + List nameVersions = new ArrayList<>(); + for (A2Source a2Source : a2Sources) { + for (A2Contribution a2Contribution : a2Source.listContributions(null)) { + for (A2Component a2Component : a2Contribution.listComponents(null)) { + for (A2Branch a2Branch : a2Component.listBranches(null)) { + for (A2Module a2Module : a2Branch.listModules(null)) { + CategoryNameVersion nameVersion = new DefaultCategoryNameVersion(a2Contribution.getId(), + a2Component.getId(), a2Module.getVersion().toString()); + nameVersions.add(nameVersion); + } + } + } + } + } + return nameVersions.iterator(); + } + + @Override + public Distribution getModuleDistribution(String moduleName, String moduleVersion) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Object getModulesDescriptor(String descriptorType) { + // TODO Auto-generated method stub + return null; + } + + public List getA2Sources() { + return a2Sources; + } + + +} diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/distribution/A2ModuleDistribution.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/distribution/A2ModuleDistribution.java new file mode 100644 index 000000000..9e90bce8f --- /dev/null +++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/distribution/A2ModuleDistribution.java @@ -0,0 +1,14 @@ +package org.argeo.slc.cms.distribution; + +import org.argeo.api.a2.A2Module; +import org.argeo.slc.build.Distribution; + +public class A2ModuleDistribution implements Distribution { + private A2Module a2Module; + + @Override + public String getDistributionId() { + return a2Module.getCoordinates(); + } + +} diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/test/CmsSmokeTest.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/test/CmsSmokeTest.java new file mode 100644 index 000000000..10b088c53 --- /dev/null +++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/test/CmsSmokeTest.java @@ -0,0 +1,20 @@ +package org.argeo.slc.cms.test; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +public class CmsSmokeTest { + + public static void main(String[] args) throws IOException { + Path instanceData; + if (args.length > 0) { + instanceData = Paths.get(args[0]); + } else { + instanceData = Files.createTempDirectory("cms-test"); + } + + } + +} diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/cms/test/MinimalJvm.java b/org.argeo.slc.runtime/src/org/argeo/slc/cms/test/MinimalJvm.java new file mode 100644 index 000000000..87eefd954 --- /dev/null +++ b/org.argeo.slc.runtime/src/org/argeo/slc/cms/test/MinimalJvm.java @@ -0,0 +1,21 @@ +package org.argeo.slc.cms.test; + +/** + * A program doing nothing and loading no classes, to be used as a baseline for + * memory usage of the JVM. + */ +public class MinimalJvm { + + synchronized void sleep() { + try { + wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) { + new MinimalJvm().sleep(); + } + +} diff --git a/org.argeo.slc.runtime/src/org/argeo/slc/internal/runtime/osgi/SlcInitActivator.java b/org.argeo.slc.runtime/src/org/argeo/slc/internal/runtime/osgi/SlcInitActivator.java new file mode 100644 index 000000000..547cda11b --- /dev/null +++ b/org.argeo.slc.runtime/src/org/argeo/slc/internal/runtime/osgi/SlcInitActivator.java @@ -0,0 +1,79 @@ +package org.argeo.slc.internal.runtime.osgi; + +import org.argeo.api.init.RuntimeManager; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; +import org.osgi.util.tracker.ServiceTracker; + +public class SlcInitActivator implements BundleActivator { +// private final static CmsLog log = CmsLog.getLog(SlcInitActivator.class); + + private ServiceTracker runtimeManagerSt; + + @Override + public void start(BundleContext context) throws Exception { +// Path userHome = Paths.get(System.getProperty("user.home")); + +// { +// EquinoxFactory equinoxFactory = new EquinoxFactory(); +// Map config = new HashMap<>(); +// config.put("osgi.console", "host1:2023"); +// config.put("osgi.frameworkParentClassloader", "app"); +// config.put("osgi.parentClassLoader", "app"); +// RuntimeManager.loadConfig(Paths.get("/usr/local/etc/argeo/user/cms/test3"), config); +// Framework framework = equinoxFactory.newFramework(config); +// framework.start(); +// OsgiBoot osgiBoot = new OsgiBoot(framework.getBundleContext()); +// osgiBoot.bootstrap(config); +// } + + // OsgiCmsDeployment.test(); + + runtimeManagerSt = new ServiceTracker<>(context, RuntimeManager.class, null) { + + @Override + public RuntimeManager addingService(ServiceReference reference) { + RuntimeManager runtimeManager = super.addingService(reference); + new Thread() { + public void run() { +// try { +// Thread.sleep(5000); +// } catch (InterruptedException e) { +// return; +// } + +// runtimeManager.startRuntime("rcp/test1", (config) -> { +// config.put("osgi.console", "host1:2023"); +// config.put(CmsDeployProperty.SSHD_PORT.getProperty(), "2222"); +//// config.put(CmsDeployProperty.HTTP_PORT.getProperty(), "7070"); +// config.put(CmsDeployProperty.HOST.getProperty(), "host1"); +//// config.put("argeo.osgi.start.6", "org.argeo.swt.minidesktop"); +// }); + + runtimeManager.startRuntime("rap/test2", (config) -> { + config.put("osgi.console", "host2:2023"); + config.put("argeo.sshd.port", "2222"); + config.put("argeo.http.port", "7070"); + config.put("argeo.host", "host2"); + String a2Source = config.get("argeo.osgi.sources"); + config.put("argeo.osgi.sources", a2Source + + ",a2+reference:///home/mbaudier/dev/git/unstable/output/a2?include=eu.netiket.on.apaf"); + config.put("argeo.osgi.start.6", "eu.netiket.on.apaf"); +//// config.put("argeo.directory", "ipa:///"); + }); + } + }.start(); + + return runtimeManager; + } + + }; + runtimeManagerSt.open(false); + } + + @Override + public void stop(BundleContext context) throws Exception { + } + +}