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
;
9 import java
.util
.HashMap
;
10 import java
.util
.List
;
12 import java
.util
.StringJoiner
;
13 import java
.util
.TreeMap
;
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
;
32 public class CmsOsgiDeployment
implements Deployment
{
33 private final static Logger logger
= System
.getLogger(CmsOsgiDeployment
.class.getName());
35 private A2Distribution distribution
;
36 private CmsTargetData targetData
;
37 private CmsDeploymentData deploymentData
;
39 private CmsDeployedSystem deployedSystem
;
41 private OsgiRuntimeContext runtimeContext
;
46 Map
<String
, String
> config
= new TreeMap
<>();
49 StringJoiner sourcesProperty
= new StringJoiner(",");
50 for (A2Source a2Source
: distribution
.getA2Sources()) {
51 sourcesProperty
.add(a2Source
.getUri().toString());
53 config
.put(OsgiBoot
.PROP_ARGEO_OSGI_SOURCES
, sourcesProperty
.toString());
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());
62 Path configurationArea
= Files
.createTempDirectory("slc-cms-test");
63 config
.put(WellKnownConstants
.OSGI_CONFIGURATION_AREA
, configurationArea
.toUri().toString());
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
);
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");
80 // config.put("osgi.console", "true");
83 for (String key
: config
.keySet()) {
84 // System.out.println(key + "=" + config.get(key));
85 logger
.log(Level
.INFO
, () -> key
+ "=" + config
.get(key
));
88 runtimeContext
= new OsgiRuntimeContext(config
);
91 deployedSystem
= new CmsOsgiDeployedSystem(runtimeContext
.getFramework().getBundleContext(), distribution
,
92 targetData
, deploymentData
);
94 } catch (Exception e
) {
95 throw new IllegalStateException("Cannot run OSGi deployment", e
);
101 public DeployedSystem
getDeployedSystem() {
102 return deployedSystem
;
106 public void setTargetData(TargetData targetData
) {
107 this.targetData
= (CmsTargetData
) targetData
;
111 public void setDeploymentData(DeploymentData deploymentData
) {
112 this.deploymentData
= (CmsDeploymentData
) deploymentData
;
116 public void setDistribution(Distribution distribution
) {
117 this.distribution
= (A2Distribution
) distribution
;
120 public OsgiRuntimeContext
getRuntimeContext() {
121 return runtimeContext
;
124 public static void main(String
[] args
) {
126 Path userHome
= Paths
.get(System
.getProperty("user.home"));
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));
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
);
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");
146 deploymentData
.getModulesToActivate(3).add("org.argeo.cms");
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");
152 deploymentData
.getModulesToActivate(5).add("org.argeo.cms.e4.rap");
154 CmsOsgiDeployment deployment
= new CmsOsgiDeployment();
155 deployment
.setDistribution(distribution
);
156 deployment
.setTargetData(targetData
);
157 deployment
.setDeploymentData(deploymentData
);
160 boolean multiple
= false;
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
);
168 CmsOsgiDeployment deployment2
= new CmsOsgiDeployment();
169 deployment2
.setDistribution(distribution
);
170 deployment2
.setTargetData(targetData2
);
171 deployment2
.setDeploymentData(deploymentData
);
175 deployment
.getRuntimeContext().waitForStop(0);
177 } catch (IOException
| InterruptedException e
) {