fixed shutdown
git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@288 7e9141cc-0065-0410-87d8-b60c137991c4
This commit is contained in:
parent
e17c559c84
commit
3ef3440a59
|
@ -21,6 +21,8 @@ import java.util.Enumeration;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ListIterator;
|
import java.util.ListIterator;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.CopyOnWriteArraySet;
|
||||||
|
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
@ -68,6 +70,7 @@ public class Server extends HandlerWrapper implements Attributes
|
||||||
private AttributesMap _attributes = new AttributesMap();
|
private AttributesMap _attributes = new AttributesMap();
|
||||||
private List<Object> _dependentBeans=new ArrayList<Object>();
|
private List<Object> _dependentBeans=new ArrayList<Object>();
|
||||||
private int _graceful=0;
|
private int _graceful=0;
|
||||||
|
private boolean _stopAtShutdown;
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
public Server()
|
public Server()
|
||||||
|
@ -107,16 +110,15 @@ public class Server extends HandlerWrapper implements Attributes
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
public boolean getStopAtShutdown()
|
public boolean getStopAtShutdown()
|
||||||
{
|
{
|
||||||
return hookThread.contains(this);
|
return _stopAtShutdown;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
public void setStopAtShutdown(boolean stop)
|
public void setStopAtShutdown(boolean stop)
|
||||||
{
|
{
|
||||||
|
_stopAtShutdown=stop;
|
||||||
if (stop)
|
if (stop)
|
||||||
hookThread.add(this);
|
hookThread.add(this);
|
||||||
else
|
|
||||||
hookThread.remove(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
|
@ -127,7 +129,6 @@ public class Server extends HandlerWrapper implements Attributes
|
||||||
{
|
{
|
||||||
return _connectors;
|
return _connectors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
public void addConnector(Connector connector)
|
public void addConnector(Connector connector)
|
||||||
|
@ -184,6 +185,9 @@ public class Server extends HandlerWrapper implements Attributes
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
protected void doStart() throws Exception
|
protected void doStart() throws Exception
|
||||||
{
|
{
|
||||||
|
if (getStopAtShutdown())
|
||||||
|
hookThread.add(this);
|
||||||
|
|
||||||
Log.info("jetty-"+_version);
|
Log.info("jetty-"+_version);
|
||||||
HttpGenerator.setServerVersion(_version);
|
HttpGenerator.setServerVersion(_version);
|
||||||
MultiException mex=new MultiException();
|
MultiException mex=new MultiException();
|
||||||
|
@ -301,6 +305,7 @@ public class Server extends HandlerWrapper implements Attributes
|
||||||
}
|
}
|
||||||
|
|
||||||
mex.ifExceptionThrow();
|
mex.ifExceptionThrow();
|
||||||
|
hookThread.remove(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
|
@ -519,8 +524,8 @@ public class Server extends HandlerWrapper implements Attributes
|
||||||
*/
|
*/
|
||||||
private static class ShutdownHookThread extends Thread
|
private static class ShutdownHookThread extends Thread
|
||||||
{
|
{
|
||||||
private boolean hooked = false;
|
private boolean _hooked = false;
|
||||||
private ArrayList servers = new ArrayList();
|
private Set<Server> _servers = new CopyOnWriteArraySet<Server>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hooks this thread for shutdown.
|
* Hooks this thread for shutdown.
|
||||||
|
@ -529,7 +534,7 @@ public class Server extends HandlerWrapper implements Attributes
|
||||||
*/
|
*/
|
||||||
private void createShutdownHook()
|
private void createShutdownHook()
|
||||||
{
|
{
|
||||||
if (!hooked)
|
if (!_hooked)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -537,7 +542,7 @@ public class Server extends HandlerWrapper implements Attributes
|
||||||
{ java.lang.Thread.class});
|
{ java.lang.Thread.class});
|
||||||
shutdownHook.invoke(Runtime.getRuntime(), new Object[]
|
shutdownHook.invoke(Runtime.getRuntime(), new Object[]
|
||||||
{ this});
|
{ this});
|
||||||
this.hooked = true;
|
_hooked = true;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -550,11 +555,11 @@ public class Server extends HandlerWrapper implements Attributes
|
||||||
/**
|
/**
|
||||||
* Add Server to servers list.
|
* Add Server to servers list.
|
||||||
*/
|
*/
|
||||||
public boolean add(Server server)
|
public void add(Server server)
|
||||||
{
|
{
|
||||||
|
_servers.add(server);
|
||||||
if (server.getStopAtShutdown())
|
if (server.getStopAtShutdown())
|
||||||
createShutdownHook();
|
createShutdownHook();
|
||||||
return this.servers.add(server);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -562,15 +567,20 @@ public class Server extends HandlerWrapper implements Attributes
|
||||||
*/
|
*/
|
||||||
public boolean contains(Server server)
|
public boolean contains(Server server)
|
||||||
{
|
{
|
||||||
return this.servers.contains(server);
|
return _servers.contains(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Iterable<Server> getServers()
|
||||||
|
{
|
||||||
|
return _servers;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear list of Servers.
|
* Clear list of Servers.
|
||||||
*/
|
*/
|
||||||
public void clear()
|
public void clear()
|
||||||
{
|
{
|
||||||
this.servers.clear();
|
_servers.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -579,7 +589,7 @@ public class Server extends HandlerWrapper implements Attributes
|
||||||
public boolean remove(Server server)
|
public boolean remove(Server server)
|
||||||
{
|
{
|
||||||
createShutdownHook();
|
createShutdownHook();
|
||||||
return this.servers.remove(server);
|
return _servers.remove(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -589,11 +599,9 @@ public class Server extends HandlerWrapper implements Attributes
|
||||||
{
|
{
|
||||||
setName("Shutdown");
|
setName("Shutdown");
|
||||||
Log.info("Shutdown hook executing");
|
Log.info("Shutdown hook executing");
|
||||||
Iterator it = servers.iterator();
|
for (Server svr : _servers)
|
||||||
while (it.hasNext())
|
|
||||||
{
|
{
|
||||||
Server svr = (Server) it.next();
|
if (svr == null || !svr.getStopAtShutdown() || !svr.isRunning())
|
||||||
if (svr == null || !svr.getStopAtShutdown())
|
|
||||||
continue;
|
continue;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
@ -18,6 +18,7 @@ import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URI;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLConnection;
|
import java.net.URLConnection;
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
|
@ -57,6 +58,17 @@ public abstract class Resource implements Serializable
|
||||||
return __defaultUseCaches;
|
return __defaultUseCaches;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
/** Construct a resource from a uri.
|
||||||
|
* @param uri A URI.
|
||||||
|
* @return A Resource object.
|
||||||
|
*/
|
||||||
|
public static Resource newResource(URI uri)
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
return newResource(uri.toURL());
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
/** Construct a resource from a url.
|
/** Construct a resource from a url.
|
||||||
* @param url A URL.
|
* @param url A URL.
|
||||||
|
|
Loading…
Reference in New Issue