@Override public void run() { final long nowMs = dateProvider.now().getTime(); Map<Class<? extends HttpServlet>, ServletStats> stats = getServletStats(); if (stats.keySet().size() == 0) { LOGGER.info("Running outdated servlets check - no servlets registered."); return; } LOGGER.info("Running outdated servlets check."); for (Map.Entry<Class<? extends HttpServlet>, ServletStats> entry : stats.entrySet()) { if (nowMs - entry.getValue().getLastRequestedAt().getTime() > servletTimeToLiveInMs) { LOGGER.info("Destroying outdated servlet " + entry.getKey().getName()); shutdownServlet(servlets.get(entry.getKey())); } } } }, monitoringIntervalInMs, monitoringIntervalInMs);
@Test public void shouldShutdownProperly() throws ServletException, ServletInitializationException { SampleServlet servlet = (SampleServlet) servletContainer.getServletForClass(SampleServlet.class, servletConfig); assertThat(servletContainer.getServletStats().size(), is(1)); servletContainer.shutdown(); assertThat(servletContainer.getServletStats().size(), is(0)); assertThat(servlet.getDestroyedCounter(), is(equalTo(1))); }
@Test public void shouldReturnServletFromPool() throws ServletException, ServletInitializationException { SampleServlet servlet = (SampleServlet) servletContainer.getServletForClass(SampleServlet.class, servletConfig); assertThat(servlet, is(not(nullValue()))); assertThat(servlet.getInitializedCounter(), is(equalTo(1))); assertThat(servlet.getServletConfig(), is(equalTo(servletConfig))); assertThat(servletContainer.getServletStats().size(), is(1)); SampleServlet servlet2 = (SampleServlet) servletContainer.getServletForClass(SampleServlet.class, servletConfig); assertThat(servlet2, is(servlet)); assertThat(servlet2.getInitializedCounter(), is(equalTo(1))); assertThat(servletContainer.getServletStats().size(), is(1)); assertThat(servlet2.getDestroyedCounter(), is(equalTo(0))); }