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