implement a Jetty reconnect to work with Configbasic_p.html port change

- instead of shutting down the server it should be sufficient to manipulate the Jetty http connector
pull/1/head
reger 12 years ago
parent 8ec350bad2
commit bfdb404867

@ -32,6 +32,7 @@ import net.yacy.cora.federate.solr.SolrServlet;
import net.yacy.cora.federate.solr.SolrServlet.Servlet404; import net.yacy.cora.federate.solr.SolrServlet.Servlet404;
import net.yacy.cora.util.ConcurrentLog; import net.yacy.cora.util.ConcurrentLog;
import net.yacy.search.Switchboard; import net.yacy.search.Switchboard;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.Server;
@ -49,7 +50,7 @@ import org.eclipse.jetty.servlet.ServletHolder;
*/ */
public class Jetty8HttpServerImpl implements YaCyHttpServer { public class Jetty8HttpServerImpl implements YaCyHttpServer {
private Server server; private final Server server;
/** /**
* @param port TCP Port to listen for http requests * @param port TCP Port to listen for http requests
@ -160,8 +161,19 @@ public class Jetty8HttpServerImpl implements YaCyHttpServer {
return false; // TODO: return false; // TODO:
} }
/**
* reconnect with new port settings (after waiting milsec) - routine returns
* immediately
*
* @param milsec wait time
*/
@Override @Override
public void reconnect(int milsec) { public void reconnect(final int milsec) {
new Thread() {
@Override
public void run() {
try { try {
Thread.sleep(milsec); Thread.sleep(milsec);
} catch (final InterruptedException e) { } catch (final InterruptedException e) {
@ -169,14 +181,27 @@ public class Jetty8HttpServerImpl implements YaCyHttpServer {
} catch (final Exception e) { } catch (final Exception e) {
ConcurrentLog.logException(e); ConcurrentLog.logException(e);
} }
try { try { // reconnect with new settings (instead to stop/start server, just manipulate connectors
server.stop(); final Connector[] cons = server.getConnectors();
server.join(); final int port = Switchboard.getSwitchboard().getConfigInt("port", 8090);
server.start(); for (Connector con : cons) {
if (con.getName().startsWith("httpd") && con.getPort() != port) {
con.close();
con.stop();
if (!con.isStopped()) {
ConcurrentLog.warn("SERVER", "Reconnect: Jetty Connector failed to stop");
}
con.setPort(port);
con.start();
ConcurrentLog.fine("SERVER", "set new port for Jetty connector " + con.getName());
}
}
} catch (Exception ex) { } catch (Exception ex) {
ConcurrentLog.logException(ex); ConcurrentLog.logException(ex);
} }
} }
}.start();
}
@Override @Override
public InetSocketAddress generateSocketAddress(String port) throws SocketException { public InetSocketAddress generateSocketAddress(String port) throws SocketException {
@ -195,7 +220,7 @@ public class Jetty8HttpServerImpl implements YaCyHttpServer {
@Override @Override
public String getVersion() { public String getVersion() {
return "Jetty " + server.getVersion(); return "Jetty " + Server.getVersion();
} }
} }

Loading…
Cancel
Save