1 package org
.argeo
.slc
.cms
.deploy
.osgi
;
3 import java
.io
.IOException
;
4 import java
.lang
.System
.Logger
;
5 import java
.lang
.System
.Logger
.Level
;
6 import java
.nio
.file
.Files
;
7 import java
.nio
.file
.Path
;
8 import java
.nio
.file
.Paths
;
9 import java
.util
.HashMap
;
10 import java
.util
.List
;
12 import java
.util
.StringJoiner
;
13 import java
.util
.TreeMap
;
15 import org
.argeo
.api
.a2
.A2Source
;
16 import org
.argeo
.api
.a2
.FsA2Source
;
17 import org
.argeo
.api
.init
.InitConstants
;
18 import org
.argeo
.api
.init
.RuntimeContext
;
19 import org
.argeo
.api
.slc
.WellKnownConstants
;
20 import org
.argeo
.api
.slc
.build
.Distribution
;
21 import org
.argeo
.api
.slc
.deploy
.DeployedSystem
;
22 import org
.argeo
.api
.slc
.deploy
.Deployment
;
23 import org
.argeo
.api
.slc
.deploy
.DeploymentData
;
24 import org
.argeo
.api
.slc
.deploy
.TargetData
;
25 import org
.argeo
.init
.osgi
.OsgiRuntimeContext
;
26 import org
.argeo
.slc
.cms
.deploy
.CmsDeployedSystem
;
27 import org
.argeo
.slc
.cms
.deploy
.CmsDeploymentData
;
28 import org
.argeo
.slc
.cms
.deploy
.CmsTargetData
;
29 import org
.argeo
.slc
.cms
.deploy
.SimpleCmsDeploymentData
;
30 import org
.argeo
.slc
.cms
.distribution
.A2Distribution
;
32 /** The process of deploying an OSGi based Argeo CMS system. */
33 public class OsgiCmsDeployment
implements Deployment
{
34 private final static Logger logger
= System
.getLogger(OsgiCmsDeployment
.class.getName());
36 private A2Distribution distribution
;
37 private CmsTargetData targetData
;
38 private CmsDeploymentData deploymentData
;
40 private CmsDeployedSystem deployedSystem
;
42 private OsgiRuntimeContext runtimeContext
;
47 Map
<String
, String
> config
= new TreeMap
<>();
50 StringJoiner sourcesProperty
= new StringJoiner(",");
51 for (A2Source a2Source
: distribution
.getA2Sources()) {
52 sourcesProperty
.add(a2Source
.getUri().toString());
54 config
.put(InitConstants
.PROP_ARGEO_OSGI_SOURCES
, sourcesProperty
.toString());
57 config
.put(WellKnownConstants
.OSGI_INSTANCE_AREA
,
58 targetData
.getInstanceData().toRealPath().toUri().toString());
60 if (targetData
.getHost() != null) {
61 config
.put("argeo.host", targetData
.getHost().toString());
64 if (targetData
.getHttpPort() != null) {
65 config
.put("argeo.http.port", targetData
.getHttpPort().toString());
68 Path configurationArea
= Files
.createTempDirectory("slc-cms-test");
69 config
.put(WellKnownConstants
.OSGI_CONFIGURATION_AREA
, configurationArea
.toUri().toString());
72 for (int startLevel
= 0; startLevel
<= 6; startLevel
++) {
73 List
<String
> modules
= deploymentData
.getModulesToActivate(startLevel
);
74 if (modules
.size() != 0) {
75 String startProperty
= String
.join(",", modules
);
76 config
.put(InitConstants
.PROP_ARGEO_OSGI_START
+ "." + startLevel
, startProperty
);
80 config
.put("org.eclipse.equinox.http.jetty.autostart", "false");
81 config
.put("org.osgi.framework.system.packages.extra",
82 "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");
83 config
.put("eclipse.ignoreApp", "true");
84 config
.put("osgi.noShutdown", "true");
85 config
.put("osgi.clean", "true");
86 config
.put("osgi.framework.useSystemProperties", "false");
88 config
.put("argeo.directory", "dc=example,dc=com.ldif");
90 if (targetData
instanceof OsgiCmsTargetData osgiCmsTargetData
91 && osgiCmsTargetData
.getTelnetPort() != null) {
93 if (targetData
.getHost() != null) {
94 hostStr
= targetData
.getHost().toString() + ":";
96 config
.put("osgi.console", hostStr
+ osgiCmsTargetData
.getTelnetPort().toString());
100 for (String key
: config
.keySet()) {
101 // System.out.println(key + "=" + config.get(key));
102 logger
.log(Level
.TRACE
, () -> key
+ "=" + config
.get(key
));
105 // FIXME use runtime manager
106 runtimeContext
= new OsgiRuntimeContext(null, config
);
107 runtimeContext
.run();
109 // deployedSystem = new OsgiCmsDeployedSystem(runtimeContext.getFramework().getBundleContext(), distribution,
110 // targetData, deploymentData);
112 } catch (Exception e
) {
113 throw new IllegalStateException("Cannot run OSGi deployment", e
);
119 public DeployedSystem
getDeployedSystem() {
120 return deployedSystem
;
124 public void setTargetData(TargetData targetData
) {
125 this.targetData
= (CmsTargetData
) targetData
;
129 public void setDeploymentData(DeploymentData deploymentData
) {
130 this.deploymentData
= (CmsDeploymentData
) deploymentData
;
134 public void setDistribution(Distribution distribution
) {
135 this.distribution
= (A2Distribution
) distribution
;
138 public OsgiRuntimeContext
getRuntimeContext() {
139 return runtimeContext
;
142 public static void main(String
[] args
) {
143 RuntimeContext runtimeContext
= test();
145 runtimeContext
.waitForStop(0);
146 } catch (InterruptedException e
) {
151 public static RuntimeContext
test() {
153 Path userHome
= Paths
.get(System
.getProperty("user.home"));
156 Path a2Base
= userHome
.resolve("dev/git/unstable/output/a2");
157 A2Distribution distribution
= new A2Distribution();
158 Map
<String
, String
> xOr
= new HashMap
<>();
159 xOr
.put("osgi", "equinox");
160 xOr
.put("swt", "rap");
161 xOr
.put("log", "syslogger");
162 xOr
.put("crypto", "fips");
163 distribution
.getA2Sources().add(new FsA2Source(a2Base
, xOr
, true, null, null));
166 Path instanceData
= userHome
.resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment/data");
167 Files
.createDirectories(instanceData
);
168 OsgiCmsTargetData targetData
= new OsgiCmsTargetData(instanceData
, "host1", 7070, 2323);
171 SimpleCmsDeploymentData deploymentData
= new SimpleCmsDeploymentData();
172 deploymentData
.getModulesToActivate(2).add("org.eclipse.equinox.http.servlet");
173 deploymentData
.getModulesToActivate(2).add("org.apache.felix.scr");
174 deploymentData
.getModulesToActivate(2).add("org.eclipse.rap.rwt.osgi");
175 deploymentData
.getModulesToActivate(2).add("org.eclipse.equinox.console");
177 deploymentData
.getModulesToActivate(3).add("org.argeo.cms");
178 deploymentData
.getModulesToActivate(3).add("org.argeo.cms.ee");
179 deploymentData
.getModulesToActivate(3).add("org.argeo.cms.lib.sshd");
180 deploymentData
.getModulesToActivate(3).add("org.argeo.cms.lib.equinox");
181 deploymentData
.getModulesToActivate(3).add("org.argeo.cms.lib.jetty");
182 deploymentData
.getModulesToActivate(3).add("org.argeo.cms.swt.rap");
184 deploymentData
.getModulesToActivate(4).add("org.argeo.cms.jcr");
185 deploymentData
.getModulesToActivate(4).add("org.argeo.app.profile.acr.fs");
187 deploymentData
.getModulesToActivate(5).add("org.argeo.app.core");
188 deploymentData
.getModulesToActivate(5).add("org.argeo.app.ui");
189 deploymentData
.getModulesToActivate(5).add("org.argeo.app.theme.default");
190 deploymentData
.getModulesToActivate(5).add("org.argeo.app.jcr");
192 deploymentData
.getModulesToActivate(5).add("org.example.suite.theme");
193 deploymentData
.getModulesToActivate(5).add("org.example.suite.core");
194 deploymentData
.getModulesToActivate(5).add("org.example.suite.ui");
195 deploymentData
.getModulesToActivate(5).add("org.example.suite.ui.rap");
197 OsgiCmsDeployment deployment
= new OsgiCmsDeployment();
198 deployment
.setDistribution(distribution
);
199 deployment
.setTargetData(targetData
);
200 deployment
.setDeploymentData(deploymentData
);
203 boolean multiple
= true;
206 // Thread.sleep(5000);
208 Path instanceData2
= userHome
.resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment2/data");
209 Files
.createDirectories(instanceData2
);
210 OsgiCmsTargetData targetData2
= new OsgiCmsTargetData(instanceData2
, "host2", 7070, 2323);
212 OsgiCmsDeployment deployment2
= new OsgiCmsDeployment();
213 deployment2
.setDistribution(distribution
);
214 deployment2
.setTargetData(targetData2
);
215 deployment2
.setDeploymentData(deploymentData
);
219 return deployment
.getRuntimeContext();
220 } catch (IOException e
) {