Merge branch 'jetty-9.3.x'

This commit is contained in:
Greg Wilkins 2016-03-10 12:35:44 +11:00
commit eac3a4a439
4 changed files with 100 additions and 10 deletions

View File

@ -776,6 +776,8 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu
}
finally
{
if (_availability==Availability.STARTING)
_availability=Availability.UNAVAILABLE;
exitScope(null);
__context.set(old_context);
// reset the classloader

View File

@ -62,8 +62,10 @@ public class HotSwapHandler extends AbstractHandlerContainer
@Override
public Handler[] getHandlers()
{
return new Handler[]
{ _handler };
Handler handler=_handler;
if (handler==null)
return new Handler[0];
return new Handler[] { handler };
}
/* ------------------------------------------------------------ */
@ -73,14 +75,13 @@ public class HotSwapHandler extends AbstractHandlerContainer
*/
public void setHandler(Handler handler)
{
if (handler == null)
throw new IllegalArgumentException("Parameter handler is null.");
try
{
Server server = getServer();
if (handler!=null)
handler.setServer(server);
updateBean(_handler,handler,true);
_handler=handler;
Server server = getServer();
handler.setServer(server);
}
catch (Exception e)
@ -116,9 +117,10 @@ public class HotSwapHandler extends AbstractHandlerContainer
@Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
if (_handler != null && isStarted())
Handler handler=_handler;
if (handler != null && isStarted() && handler.isStarted())
{
_handler.handle(target,baseRequest,request,response);
handler.handle(target,baseRequest,request,response);
}
}
@ -126,7 +128,9 @@ public class HotSwapHandler extends AbstractHandlerContainer
@Override
protected void expandChildren(List<Handler> list, Class<?> byClass)
{
expandHandler(_handler,list,byClass);
Handler handler=_handler;
if (handler!=null)
expandHandler(handler,list,byClass);
}
/* ------------------------------------------------------------ */

View File

@ -538,7 +538,9 @@ public class ContainerLifeCycle extends AbstractLifeCycle implements Container,
{
try
{
stop((LifeCycle)bean._bean);
LifeCycle lc=(LifeCycle)bean._bean;
if (lc.isRunning())
stop(lc);
}
catch(RuntimeException | Error e)
{

View File

@ -25,10 +25,14 @@ import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.GenericServlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
@ -37,9 +41,11 @@ import org.eclipse.jetty.server.LocalConnector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.util.resource.ResourceCollection;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;
@ -237,4 +243,80 @@ public class WebAppContextTest
this.getServletContext().getContext("/B/s");
}
}
@Test
public void testServletContextListener() throws Exception
{
Server server = new Server();
ServletContextHandler context = new ServletContextHandler(
ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.setResourceBase(System.getProperty("java.io.tmpdir"));
server.setHandler(context);
final List<String> history=new ArrayList<>();
context.addEventListener(new ServletContextListener()
{
@Override
public void contextInitialized(ServletContextEvent servletContextEvent)
{
history.add("I1");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent)
{
history.add("D1");
}
});
context.addEventListener(new ServletContextListener()
{
@Override
public void contextInitialized(ServletContextEvent servletContextEvent)
{
history.add("I2");
throw new RuntimeException("Listener2 broken");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent)
{
history.add("D2");
}
});
context.addEventListener(new ServletContextListener()
{
@Override
public void contextInitialized(ServletContextEvent servletContextEvent)
{
history.add("I3");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent)
{
history.add("D3");
}
});
try
{
server.start();
}
catch(Exception e)
{
// System.err.println(e);
}
finally
{
server.stop();
}
// TODO should be either:
// Assert.assertThat(history,Matchers.contains("I1","I2","D1"));
// or
// Assert.assertThat(history,Matchers.contains("I1","I2","D3","D3","D1"));
Assert.assertThat(history,Matchers.contains("I1","I2","D3","D2","D1"));
}
}