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
;
11 import java
.util
.StringJoiner
;
12 import java
.util
.TreeMap
;
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
;
31 public class CmsOsgiDeployment
implements Deployment
{
32 private final static Logger logger
= System
.getLogger(CmsOsgiDeployment
.class.getName());
34 private A2Distribution distribution
;
35 private CmsTargetData targetData
;
36 private CmsDeploymentData deploymentData
;
38 private CmsDeployedSystem deployedSystem
;
40 private OsgiRuntimeContext runtimeContext
;
45 Map
<String
, String
> config
= new TreeMap
<>();
48 StringJoiner sourcesProperty
= new StringJoiner(",");
49 for (A2Source a2Source
: distribution
.getA2Sources()) {
50 sourcesProperty
.add(a2Source
.getUri().toString());
52 config
.put(OsgiBoot
.PROP_ARGEO_OSGI_SOURCES
, sourcesProperty
.toString());
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());
61 Path configurationArea
= Files
.createTempDirectory("slc-cms-test");
62 config
.put(WellKnownConstants
.OSGI_CONFIGURATION_AREA
, configurationArea
.toUri().toString());
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
);
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");
79 // config.put("osgi.console", "true");
82 for (String key
: config
.keySet()) {
83 // System.out.println(key + "=" + config.get(key));
84 logger
.log(Level
.INFO
, () -> key
+ "=" + config
.get(key
));
87 runtimeContext
= new OsgiRuntimeContext(config
);
90 deployedSystem
= new CmsOsgiDeployedSystem(runtimeContext
.getFramework().getBundleContext(), distribution
,
91 targetData
, deploymentData
);
93 } catch (Exception e
) {
94 throw new IllegalStateException("Cannot run OSGi deployment", e
);
100 public DeployedSystem
getDeployedSystem() {
101 return deployedSystem
;
105 public void setTargetData(TargetData targetData
) {
106 this.targetData
= (CmsTargetData
) targetData
;
110 public void setDeploymentData(DeploymentData deploymentData
) {
111 this.deploymentData
= (CmsDeploymentData
) deploymentData
;
115 public void setDistribution(Distribution distribution
) {
116 this.distribution
= (A2Distribution
) distribution
;
119 public OsgiRuntimeContext
getRuntimeContext() {
120 return runtimeContext
;
123 public static void main(String
[] args
) {
125 Path userHome
= Paths
.get(System
.getProperty("user.home"));
128 Path a2Base
= userHome
.resolve("dev/git/unstable/output/a2");
129 A2Distribution distribution
= new A2Distribution();
130 distribution
.getA2Sources().add(new FsA2Source(a2Base
));
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
);
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");
145 deploymentData
.getModulesToActivate(3).add("org.argeo.cms");
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");
151 deploymentData
.getModulesToActivate(5).add("org.argeo.cms.e4.rap");
153 CmsOsgiDeployment deployment
= new CmsOsgiDeployment();
154 deployment
.setDistribution(distribution
);
155 deployment
.setTargetData(targetData
);
156 deployment
.setDeploymentData(deploymentData
);
159 boolean multiple
= false;
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
);
167 CmsOsgiDeployment deployment2
= new CmsOsgiDeployment();
168 deployment2
.setDistribution(distribution
);
169 deployment2
.setTargetData(targetData2
);
170 deployment2
.setDeploymentData(deploymentData
);
174 deployment
.getRuntimeContext().waitForStop(0);
176 } catch (IOException
| InterruptedException e
) {