1 package org
.argeo
.slc
.support
.deploy
;
3 import java
.io
.BufferedReader
;
4 import java
.io
.IOException
;
5 import java
.io
.InputStream
;
6 import java
.io
.InputStreamReader
;
7 import java
.util
.Arrays
;
9 import org
.apache
.commons
.logging
.Log
;
10 import org
.apache
.commons
.logging
.LogFactory
;
11 import org
.argeo
.slc
.core
.SlcException
;
12 import org
.argeo
.slc
.core
.deploy
.DeployedSystemManager
;
14 public class HttpdServerManager
implements DeployedSystemManager
<HttpdServer
> {
15 private final static Log log
= LogFactory
.getLog(HttpdServerManager
.class);
17 private HttpdServer httpdServer
;
20 runProcessAsync(createCommandLine("start"));
21 log
.info("Started httpd server with root "
22 + httpdServer
.getTargetData().getServerRoot());
26 runProcessAsync(createCommandLine("stop"));
27 log
.info("Stopped httpd server with root "
28 + httpdServer
.getTargetData().getServerRoot());
31 protected String
[] createCommandLine(String action
) {
32 String httpdPath
= httpdServer
.getTargetData().getExecutables()
33 .getExecutablePath("httpd");
34 String
[] cmd
= { httpdPath
, "-d",
35 httpdServer
.getTargetData().getServerRoot(), "-f",
36 httpdServer
.getDeploymentData().getConfigFile(), "-k", action
};
37 if (log
.isDebugEnabled())
38 log
.debug("Command line: " + Arrays
.asList(cmd
));
42 protected static void runProcessAsync(String
... command
) {
43 ProcessBuilder procBuilder
= new ProcessBuilder(command
);
44 procBuilder
.redirectErrorStream(true);
46 Process proc
= procBuilder
.start();
47 final InputStream in
= proc
.getInputStream();
48 Thread logThread
= new Thread() {
52 BufferedReader reader
= new BufferedReader(
53 new InputStreamReader(in
));
56 while ((line
= reader
.readLine()) != null)
58 } catch (IOException e
) {
59 log
.error("Failed to read stdout", e
);
65 } catch (IOException e
) {
66 throw new SlcException("Could not run command", e
);
70 public void setDeployedSystem(HttpdServer httpdServer
) {
71 this.httpdServer
= httpdServer
;