diff --git a/scm-server/src/main/java/sonia/scm/server/ScmServer.java b/scm-server/src/main/java/sonia/scm/server/ScmServer.java index 6cb36415a6..13da881679 100644 --- a/scm-server/src/main/java/sonia/scm/server/ScmServer.java +++ b/scm-server/src/main/java/sonia/scm/server/ScmServer.java @@ -92,12 +92,23 @@ public class ScmServer extends Thread { try { + if (!initialized) + { + server.join(); + } + server.start(); - server.join(); } catch (Exception ex) { - throw new RuntimeException(ex); + if (ex instanceof ScmServerException) + { + throw(ScmServerException) ex; + } + else + { + throw new ScmServerException("could not start scm-server", ex); + } } } @@ -110,6 +121,7 @@ public class ScmServer extends Thread try { server.setStopAtShutdown(true); + initialized = false; } catch (Exception ex) { @@ -117,8 +129,28 @@ public class ScmServer extends Thread } } + /** + * Method description + * + */ + void init() + { + try + { + server.start(); + initialized = true; + } + catch (Exception ex) + { + throw new ScmServerException("could not initialize server", ex); + } + } + //~--- fields --------------------------------------------------------------- + /** Field description */ + private boolean initialized = false; + /** Field description */ private Server server = new Server(); } diff --git a/scm-server/src/main/java/sonia/scm/server/ScmServerDaemon.java b/scm-server/src/main/java/sonia/scm/server/ScmServerDaemon.java index 93fd7d77bd..0799f7e69e 100644 --- a/scm-server/src/main/java/sonia/scm/server/ScmServerDaemon.java +++ b/scm-server/src/main/java/sonia/scm/server/ScmServerDaemon.java @@ -113,6 +113,9 @@ public class ScmServerDaemon implements Daemon public void init(DaemonContext context) throws DaemonInitException, Exception { daemonArgs = context.getArguments(); + // initialize web server and open port. We have to do this in the init + // method, because this method is started by jsvc with super user privileges. + webserver.init(); } /**