-Bundle-Activator: org.argeo.slc.init.osgi.SlcInitActivator
-
Import-Package: \
org.apache.commons.logging,\
org.postgresql;version="[42,43)";resolution:=optional,\
output.. = bin/
bin.includes = META-INF/,\
.
-additional.bundles = org.argeo.init
+++ /dev/null
-package org.argeo.slc.cms.deploy;
-
-import org.argeo.slc.deploy.DeployedSystem;
-
-public interface CmsDeployedSystem extends DeployedSystem {
-
-}
+++ /dev/null
-package org.argeo.slc.cms.deploy;
-
-import java.util.List;
-
-import org.argeo.slc.deploy.DeploymentData;
-
-public interface CmsDeploymentData extends DeploymentData {
- List<String> getModulesToActivate(int startLevel);
-}
+++ /dev/null
-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();
-
-}
+++ /dev/null
-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<Integer, List<String>> startLevels = new TreeMap<>();
-
- @Override
- public List<String> getModulesToActivate(int startLevel) {
- startLevels.putIfAbsent(startLevel, new ArrayList<>());
- return startLevels.get(startLevel);
- }
-
-}
+++ /dev/null
-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;
- }
-
-}
+++ /dev/null
-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;
- }
-
-}
+++ /dev/null
-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<String, String> 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<String> 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<String, String> 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;
- }
- }
-
-}
+++ /dev/null
-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;
- }
-
-}
+++ /dev/null
-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<A2Source> 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<? extends NameVersion> nameVersions() {
- List<CategoryNameVersion> 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<A2Source> getA2Sources() {
- return a2Sources;
- }
-
-
-}
+++ /dev/null
-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();
- }
-
-}
+++ /dev/null
-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");
- }
-
- }
-
-}
+++ /dev/null
-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();
- }
-
-}
+++ /dev/null
-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<RuntimeManager, RuntimeManager> runtimeManagerSt;
-
- @Override
- public void start(BundleContext context) throws Exception {
- Path userHome = Paths.get(System.getProperty("user.home"));
-
-// {
-// EquinoxFactory equinoxFactory = new EquinoxFactory();
-// Map<String, String> 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<RuntimeManager> 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 {
- }
-
-}
+Bundle-Activator: org.argeo.slc.internal.runtime.osgi.SlcInitActivator
+
Import-Package: \
org.argeo.slc.deploy,\
org.apache.commons.exec.*;resolution:=optional,\
--- /dev/null
+package org.argeo.slc.cms.deploy;
+
+import org.argeo.slc.deploy.DeployedSystem;
+
+public interface CmsDeployedSystem extends DeployedSystem {
+
+}
--- /dev/null
+package org.argeo.slc.cms.deploy;
+
+import java.util.List;
+
+import org.argeo.slc.deploy.DeploymentData;
+
+public interface CmsDeploymentData extends DeploymentData {
+ List<String> getModulesToActivate(int startLevel);
+}
--- /dev/null
+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();
+
+}
--- /dev/null
+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<Integer, List<String>> startLevels = new TreeMap<>();
+
+ @Override
+ public List<String> getModulesToActivate(int startLevel) {
+ startLevels.putIfAbsent(startLevel, new ArrayList<>());
+ return startLevels.get(startLevel);
+ }
+
+}
--- /dev/null
+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;
+ }
+
+}
--- /dev/null
+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;
+ }
+
+}
--- /dev/null
+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<String, String> 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<String> 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<String, String> 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;
+ }
+ }
+
+}
--- /dev/null
+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;
+ }
+
+}
--- /dev/null
+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<A2Source> 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<? extends NameVersion> nameVersions() {
+ List<CategoryNameVersion> 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<A2Source> getA2Sources() {
+ return a2Sources;
+ }
+
+
+}
--- /dev/null
+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();
+ }
+
+}
--- /dev/null
+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");
+ }
+
+ }
+
+}
--- /dev/null
+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();
+ }
+
+}
--- /dev/null
+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<RuntimeManager, RuntimeManager> runtimeManagerSt;
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+// Path userHome = Paths.get(System.getProperty("user.home"));
+
+// {
+// EquinoxFactory equinoxFactory = new EquinoxFactory();
+// Map<String, String> 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<RuntimeManager> 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 {
+ }
+
+}