]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.runtime/src/org/argeo/slc/cms/deploy/osgi/OsgiCmsDeployment.java
f6e55caef9ae31ce58ab440d4a616589f43b17de
[gpl/argeo-slc.git] / org.argeo.slc.runtime / src / org / argeo / slc / cms / deploy / osgi / OsgiCmsDeployment.java
1 package org.argeo.slc.cms.deploy.osgi;
2
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;
11 import java.util.Map;
12 import java.util.StringJoiner;
13 import java.util.TreeMap;
14
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.init.osgi.OsgiRuntimeContext;
20 import org.argeo.slc.WellKnownConstants;
21 import org.argeo.slc.build.Distribution;
22 import org.argeo.slc.cms.deploy.CmsDeployedSystem;
23 import org.argeo.slc.cms.deploy.CmsDeploymentData;
24 import org.argeo.slc.cms.deploy.CmsTargetData;
25 import org.argeo.slc.cms.deploy.SimpleCmsDeploymentData;
26 import org.argeo.slc.cms.distribution.A2Distribution;
27 import org.argeo.slc.deploy.DeployedSystem;
28 import org.argeo.slc.deploy.Deployment;
29 import org.argeo.slc.deploy.DeploymentData;
30 import org.argeo.slc.deploy.TargetData;
31
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());
35
36 private A2Distribution distribution;
37 private CmsTargetData targetData;
38 private CmsDeploymentData deploymentData;
39
40 private CmsDeployedSystem deployedSystem;
41
42 private OsgiRuntimeContext runtimeContext;
43
44 @Override
45 public void run() {
46 try {
47 Map<String, String> config = new TreeMap<>();
48
49 // sources
50 StringJoiner sourcesProperty = new StringJoiner(",");
51 for (A2Source a2Source : distribution.getA2Sources()) {
52 sourcesProperty.add(a2Source.getUri().toString());
53 }
54 config.put(InitConstants.PROP_ARGEO_OSGI_SOURCES, sourcesProperty.toString());
55
56 // target
57 config.put(WellKnownConstants.OSGI_INSTANCE_AREA,
58 targetData.getInstanceData().toRealPath().toUri().toString());
59
60 if (targetData.getHost() != null) {
61 config.put("argeo.host", targetData.getHost().toString());
62 }
63
64 if (targetData.getHttpPort() != null) {
65 config.put("argeo.http.port", targetData.getHttpPort().toString());
66 }
67
68 Path configurationArea = Files.createTempDirectory("slc-cms-test");
69 config.put(WellKnownConstants.OSGI_CONFIGURATION_AREA, configurationArea.toUri().toString());
70
71 // modules activation
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);
77 }
78 }
79
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");
87
88 config.put("argeo.directory", "dc=example,dc=com.ldif");
89
90 if (targetData instanceof OsgiCmsTargetData osgiCmsTargetData
91 && osgiCmsTargetData.getTelnetPort() != null) {
92 String hostStr = "";
93 if (targetData.getHost() != null) {
94 hostStr = targetData.getHost().toString() + ":";
95 }
96 config.put("osgi.console", hostStr + osgiCmsTargetData.getTelnetPort().toString());
97 }
98
99 // initialise
100 for (String key : config.keySet()) {
101 // System.out.println(key + "=" + config.get(key));
102 logger.log(Level.TRACE, () -> key + "=" + config.get(key));
103 }
104
105 // FIXME use runtime manager
106 runtimeContext = new OsgiRuntimeContext(config);
107 runtimeContext.run();
108
109 // deployedSystem = new OsgiCmsDeployedSystem(runtimeContext.getFramework().getBundleContext(), distribution,
110 // targetData, deploymentData);
111
112 } catch (Exception e) {
113 throw new IllegalStateException("Cannot run OSGi deployment", e);
114 }
115
116 }
117
118 @Override
119 public DeployedSystem getDeployedSystem() {
120 return deployedSystem;
121 }
122
123 @Override
124 public void setTargetData(TargetData targetData) {
125 this.targetData = (CmsTargetData) targetData;
126 }
127
128 @Override
129 public void setDeploymentData(DeploymentData deploymentData) {
130 this.deploymentData = (CmsDeploymentData) deploymentData;
131 }
132
133 @Override
134 public void setDistribution(Distribution distribution) {
135 this.distribution = (A2Distribution) distribution;
136 }
137
138 public OsgiRuntimeContext getRuntimeContext() {
139 return runtimeContext;
140 }
141
142 public static void main(String[] args) {
143 RuntimeContext runtimeContext = test();
144 try {
145 runtimeContext.waitForStop(0);
146 } catch (InterruptedException e) {
147 e.printStackTrace();
148 }
149 }
150
151 public static RuntimeContext test() {
152 try {
153 Path userHome = Paths.get(System.getProperty("user.home"));
154
155 // distribution
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));
164
165 // target data
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);
169
170 // deployment data
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");
176
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");
183
184 deploymentData.getModulesToActivate(4).add("org.argeo.cms.jcr");
185 deploymentData.getModulesToActivate(4).add("org.argeo.app.profile.acr.fs");
186
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");
191
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");
196
197 OsgiCmsDeployment deployment = new OsgiCmsDeployment();
198 deployment.setDistribution(distribution);
199 deployment.setTargetData(targetData);
200 deployment.setDeploymentData(deploymentData);
201 deployment.run();
202
203 boolean multiple = true;
204 if (multiple) {
205 // wait a bit
206 // Thread.sleep(5000);
207
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);
211
212 OsgiCmsDeployment deployment2 = new OsgiCmsDeployment();
213 deployment2.setDistribution(distribution);
214 deployment2.setTargetData(targetData2);
215 deployment2.setDeploymentData(deploymentData);
216 deployment2.run();
217 }
218
219 return deployment.getRuntimeContext();
220 } catch (IOException e) {
221 e.printStackTrace();
222 System.exit(1);
223 return null;
224 }
225 }
226
227 }