]> git.argeo.org Git - gpl/argeo-slc.git/blob - CmsOsgiDeployment.java
d49f526dd8ab9eadf5ae6eb7dba8ec3f8494464d
[gpl/argeo-slc.git] / 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.init.a2.A2Source;
16 import org.argeo.init.a2.FsA2Source;
17 import org.argeo.init.osgi.OsgiBoot;
18 import org.argeo.init.osgi.OsgiRuntimeContext;
19 import org.argeo.slc.WellKnownConstants;
20 import org.argeo.slc.build.Distribution;
21 import org.argeo.slc.cms.deploy.CmsDeployedSystem;
22 import org.argeo.slc.cms.deploy.CmsDeploymentData;
23 import org.argeo.slc.cms.deploy.CmsTargetData;
24 import org.argeo.slc.cms.deploy.SimpleCmsDeploymentData;
25 import org.argeo.slc.cms.deploy.SimpleCmsTargetData;
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 public class CmsOsgiDeployment implements Deployment {
33 private final static Logger logger = System.getLogger(CmsOsgiDeployment.class.getName());
34
35 private A2Distribution distribution;
36 private CmsTargetData targetData;
37 private CmsDeploymentData deploymentData;
38
39 private CmsDeployedSystem deployedSystem;
40
41 private OsgiRuntimeContext runtimeContext;
42
43 @Override
44 public void run() {
45 try {
46 Map<String, String> config = new TreeMap<>();
47
48 // sources
49 StringJoiner sourcesProperty = new StringJoiner(",");
50 for (A2Source a2Source : distribution.getA2Sources()) {
51 sourcesProperty.add(a2Source.getUri().toString());
52 }
53 config.put(OsgiBoot.PROP_ARGEO_OSGI_SOURCES, sourcesProperty.toString());
54
55 // target
56 config.put(WellKnownConstants.OSGI_INSTANCE_AREA,
57 targetData.getInstanceData().toRealPath().toUri().toString());
58 if (targetData.getHttpPort() != null) {
59 config.put(WellKnownConstants.OSGI_HTTP_PORT, targetData.getHttpPort().toString());
60 }
61
62 Path configurationArea = Files.createTempDirectory("slc-cms-test");
63 config.put(WellKnownConstants.OSGI_CONFIGURATION_AREA, configurationArea.toUri().toString());
64
65 // modules activation
66 for (int startLevel = 0; startLevel <= 6; startLevel++) {
67 List<String> modules = deploymentData.getModulesToActivate(startLevel);
68 if (modules.size() != 0) {
69 String startProperty = String.join(",", modules);
70 config.put(OsgiBoot.PROP_ARGEO_OSGI_START + "." + startLevel + ".node", startProperty);
71 }
72 }
73
74 config.put("org.eclipse.equinox.http.jetty.autostart", "false");
75 config.put("org.osgi.framework.bootdelegation",
76 "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");
77 config.put("eclipse.ignoreApp", "true");
78 config.put("osgi.noShutdown", "true");
79
80 // config.put("osgi.console", "true");
81
82 // initialise
83 for (String key : config.keySet()) {
84 // System.out.println(key + "=" + config.get(key));
85 logger.log(Level.INFO, () -> key + "=" + config.get(key));
86 }
87
88 runtimeContext = new OsgiRuntimeContext(config);
89 runtimeContext.run();
90
91 deployedSystem = new CmsOsgiDeployedSystem(runtimeContext.getFramework().getBundleContext(), distribution,
92 targetData, deploymentData);
93
94 } catch (Exception e) {
95 throw new IllegalStateException("Cannot run OSGi deployment", e);
96 }
97
98 }
99
100 @Override
101 public DeployedSystem getDeployedSystem() {
102 return deployedSystem;
103 }
104
105 @Override
106 public void setTargetData(TargetData targetData) {
107 this.targetData = (CmsTargetData) targetData;
108 }
109
110 @Override
111 public void setDeploymentData(DeploymentData deploymentData) {
112 this.deploymentData = (CmsDeploymentData) deploymentData;
113 }
114
115 @Override
116 public void setDistribution(Distribution distribution) {
117 this.distribution = (A2Distribution) distribution;
118 }
119
120 public OsgiRuntimeContext getRuntimeContext() {
121 return runtimeContext;
122 }
123
124 public static void main(String[] args) {
125 try {
126 Path userHome = Paths.get(System.getProperty("user.home"));
127
128 // distribution
129 Path a2Base = userHome.resolve("dev/git/unstable/output/a2");
130 A2Distribution distribution = new A2Distribution();
131 distribution.getA2Sources().add(new FsA2Source(a2Base, new HashMap<>(), true));
132
133 // target data
134 Path instanceData = userHome.resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment/data");
135 Files.createDirectories(instanceData);
136 Integer httpPort = 7070;
137 SimpleCmsTargetData targetData = new SimpleCmsTargetData(instanceData, httpPort);
138
139 // deployment data
140 SimpleCmsDeploymentData deploymentData = new SimpleCmsDeploymentData();
141 deploymentData.getModulesToActivate(2).add("org.eclipse.equinox.http.servlet");
142 deploymentData.getModulesToActivate(2).add("org.eclipse.equinox.cm");
143 deploymentData.getModulesToActivate(2).add("org.apache.felix.scr");
144 deploymentData.getModulesToActivate(2).add("org.eclipse.rap.rwt.osgi");
145
146 deploymentData.getModulesToActivate(3).add("org.argeo.cms");
147
148 deploymentData.getModulesToActivate(4).add("org.argeo.cms.servlet");
149 deploymentData.getModulesToActivate(4).add("org.argeo.cms.ui.rap");
150 deploymentData.getModulesToActivate(4).add("org.argeo.cms.jcr");
151
152 deploymentData.getModulesToActivate(5).add("org.argeo.cms.e4.rap");
153
154 CmsOsgiDeployment deployment = new CmsOsgiDeployment();
155 deployment.setDistribution(distribution);
156 deployment.setTargetData(targetData);
157 deployment.setDeploymentData(deploymentData);
158 deployment.run();
159
160 boolean multiple = false;
161 if (multiple) {
162
163 Path instanceData2 = userHome.resolve("dev/git/unstable/argeo-slc/sdk/exec/cms-deployment2/data");
164 Files.createDirectories(instanceData2);
165 Integer httpPort2 = 7071;
166 SimpleCmsTargetData targetData2 = new SimpleCmsTargetData(instanceData2, httpPort2);
167
168 CmsOsgiDeployment deployment2 = new CmsOsgiDeployment();
169 deployment2.setDistribution(distribution);
170 deployment2.setTargetData(targetData2);
171 deployment2.setDeploymentData(deploymentData);
172 deployment2.run();
173 }
174
175 deployment.getRuntimeContext().waitForStop(0);
176
177 } catch (IOException | InterruptedException e) {
178 e.printStackTrace();
179 System.exit(1);
180 }
181 }
182
183 }