]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.cms/src/org/argeo/slc/cms/deploy/osgi/CmsOsgiDeployment.java
e784e544fe7feeb7709e164d714539e057ba7d35
[gpl/argeo-slc.git] / org.argeo.slc.cms / src / org / argeo / slc / cms / deploy / osgi / CmsOsgiDeployment.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.cms.CmsDeployProperty;
16 import org.argeo.init.a2.A2Source;
17 import org.argeo.init.a2.FsA2Source;
18 import org.argeo.init.osgi.OsgiBoot;
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.deploy.SimpleCmsTargetData;
27 import org.argeo.slc.cms.distribution.A2Distribution;
28 import org.argeo.slc.deploy.DeployedSystem;
29 import org.argeo.slc.deploy.Deployment;
30 import org.argeo.slc.deploy.DeploymentData;
31 import org.argeo.slc.deploy.TargetData;
32
33 public class CmsOsgiDeployment implements Deployment {
34 private final static Logger logger = System.getLogger(CmsOsgiDeployment.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(OsgiBoot.PROP_ARGEO_OSGI_SOURCES, sourcesProperty.toString());
55
56 // target
57 config.put(WellKnownConstants.OSGI_INSTANCE_AREA,
58 targetData.getInstanceData().toRealPath().toUri().toString());
59 if (targetData.getHttpPort() != null) {
60 config.put(CmsDeployProperty.HTTP_PORT.getProperty(), targetData.getHttpPort().toString());
61 }
62
63 Path configurationArea = Files.createTempDirectory("slc-cms-test");
64 config.put(WellKnownConstants.OSGI_CONFIGURATION_AREA, configurationArea.toUri().toString());
65
66 // modules activation
67 for (int startLevel = 0; startLevel <= 6; startLevel++) {
68 List<String> modules = deploymentData.getModulesToActivate(startLevel);
69 if (modules.size() != 0) {
70 String startProperty = String.join(",", modules);
71 config.put(OsgiBoot.PROP_ARGEO_OSGI_START + "." + startLevel, startProperty);
72 }
73 }
74
75 config.put("org.eclipse.equinox.http.jetty.autostart", "false");
76 config.put("org.osgi.framework.bootdelegation",
77 "com.sun.jndi.ldap,com.sun.jndi.ldap.sasl,com.sun.security.jgss,com.sun.jndi.dns,com.sun.nio.file,com.sun.nio.sctp");
78 config.put("eclipse.ignoreApp", "true");
79 config.put("osgi.noShutdown", "true");
80
81 config.put("osgi.console", "2323");
82
83 // initialise
84 for (String key : config.keySet()) {
85 // System.out.println(key + "=" + config.get(key));
86 logger.log(Level.INFO, () -> key + "=" + config.get(key));
87 }
88
89 runtimeContext = new OsgiRuntimeContext(config);
90 runtimeContext.run();
91
92 deployedSystem = new CmsOsgiDeployedSystem(runtimeContext.getFramework().getBundleContext(), distribution,
93 targetData, deploymentData);
94
95 } catch (Exception e) {
96 throw new IllegalStateException("Cannot run OSGi deployment", e);
97 }
98
99 }
100
101 @Override
102 public DeployedSystem getDeployedSystem() {
103 return deployedSystem;
104 }
105
106 @Override
107 public void setTargetData(TargetData targetData) {
108 this.targetData = (CmsTargetData) targetData;
109 }
110
111 @Override
112 public void setDeploymentData(DeploymentData deploymentData) {
113 this.deploymentData = (CmsDeploymentData) deploymentData;
114 }
115
116 @Override
117 public void setDistribution(Distribution distribution) {
118 this.distribution = (A2Distribution) distribution;
119 }
120
121 public OsgiRuntimeContext getRuntimeContext() {
122 return runtimeContext;
123 }
124
125 public static void main(String[] args) {
126 try {
127 Path userHome = Paths.get(System.getProperty("user.home"));
128
129 // distribution
130 Path a2Base = userHome.resolve("dev/git/unstable/output/a2");
131 A2Distribution distribution = new A2Distribution();
132 Map<String, String> xOr = new HashMap<>();
133 xOr.put("osgi", "equinox");
134 xOr.put("swt", "rap");
135 distribution.getA2Sources().add(new FsA2Source(a2Base, xOr, true));
136
137 // target data
138 Path instanceData = userHome.resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment/data");
139 Files.createDirectories(instanceData);
140 Integer httpPort = 7070;
141 SimpleCmsTargetData targetData = new SimpleCmsTargetData(instanceData, httpPort);
142
143 // deployment data
144 SimpleCmsDeploymentData deploymentData = new SimpleCmsDeploymentData();
145 deploymentData.getModulesToActivate(2).add("org.eclipse.equinox.http.servlet");
146 deploymentData.getModulesToActivate(2).add("org.apache.felix.scr");
147 deploymentData.getModulesToActivate(2).add("org.eclipse.rap.rwt.osgi");
148 deploymentData.getModulesToActivate(2).add("org.eclipse.equinox.console");
149
150 deploymentData.getModulesToActivate(3).add("org.argeo.cms");
151 deploymentData.getModulesToActivate(3).add("org.argeo.cms.swt.rap");
152 deploymentData.getModulesToActivate(3).add("org.argeo.cms.ee");
153 deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.sshd");
154 deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.equinox");
155 deploymentData.getModulesToActivate(3).add("org.argeo.cms.lib.jetty");
156
157 // deploymentData.getModulesToActivate(4).add("org.argeo.cms.servlet");
158 // deploymentData.getModulesToActivate(4).add("org.argeo.cms.ui.rap");
159 deploymentData.getModulesToActivate(4).add("org.argeo.cms.jcr");
160 //
161 deploymentData.getModulesToActivate(5).add("org.argeo.app.profile.acr.fs");
162 deploymentData.getModulesToActivate(5).add("org.argeo.app.core");
163 deploymentData.getModulesToActivate(5).add("org.argeo.app.ui");
164 deploymentData.getModulesToActivate(5).add("org.argeo.app.profile.acr.fs");
165 deploymentData.getModulesToActivate(5).add("org.argeo.app.theme.default");
166
167 CmsOsgiDeployment deployment = new CmsOsgiDeployment();
168 deployment.setDistribution(distribution);
169 deployment.setTargetData(targetData);
170 deployment.setDeploymentData(deploymentData);
171 deployment.run();
172
173 boolean multiple = false;
174 if (multiple) {
175
176 Path instanceData2 = userHome.resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment2/data");
177 Files.createDirectories(instanceData2);
178 Integer httpPort2 = 7071;
179 SimpleCmsTargetData targetData2 = new SimpleCmsTargetData(instanceData2, httpPort2);
180
181 CmsOsgiDeployment deployment2 = new CmsOsgiDeployment();
182 deployment2.setDistribution(distribution);
183 deployment2.setTargetData(targetData2);
184 deployment2.setDeploymentData(deploymentData);
185 deployment2.run();
186 }
187
188 deployment.getRuntimeContext().waitForStop(0);
189
190 } catch (IOException | InterruptedException e) {
191 e.printStackTrace();
192 System.exit(1);
193 }
194 }
195
196 }