2016-11-23 3 views
0

Я пытаюсь сделать параметры DoSFilter.java настраиваемыми/редактируемыми в Jetty. Это приведенный ниже код. Параметры не редактируются в JConsole.Jetty: Как сделать параметры DoSFilter редактируемыми с помощью JMX. Например, maxRequestsPerSec

public class TestBalancerServlet { 

private static final Logger LOG = Log.getLogger(TestBalancerServlet.class); 

public static void main(String[] args) { 

    try { 
     LOG.info("Initiating the Server startup"); 

     Server server = new Server(8085); 

     // Setup JMX 
     MBeanContainer mbContainer=new MBeanContainer(ManagementFactory.getPlatformMBeanServer()); 
     server.addEventListener(mbContainer); 
     server.addBean(mbContainer); 

     // Add loggers MBean to server (will be picked up by MBeanContainer above) 
     server.addBean(Log.getLog()); 

     // 2. Creaing the WebAppContext for the created content 
     WebAppContext ctx = new WebAppContext(); 
     ctx.setResourceBase("src/main/webapp"); 
     ctx.setContextPath("/jetty-jsp-example"); 

     ServletHolder jerseyServlet = ctx.addServlet(BalancerServlet.class,"/*"); 
     DoSFilter2 filter = new DoSFilter2(); 
     FilterHolder holder = new FilterHolder(filter); 
     String name = "DosFilter"; 
     holder.setName(name); 
     holder.setInitParameter("managedAttr", "true"); 
     holder.setInitParameter("maxRequestsPerSec", "6"); 
     //_dosFilter.setInitParameter("delayMs", "200"); 
     holder.setInitParameter("delayMs", "-1"); 
     ctx.addFilter(holder, "/*", EnumSet.of(DispatcherType.FORWARD)); 
     ctx.setInitParameter(ServletContextHandler.MANAGED_ATTRIBUTES, name); 
     jerseyServlet.setInitOrder(0); 
     jerseyServlet.setInitParameter("maxThreads", "1"); 
     //jerseyServlet.setInitParameter("proxyTo", "http://cnn.com/"); 
     // give your servlet a name 
     jerseyServlet.setName("proxy"); 
     // parameter is 'balancerMember.NAME.proxyTo' 
     jerseyServlet.setInitParameter("balancerMember.proxy.proxyTo", "http://cnn.com/"); 

     ctx.setAttribute("o:Prg.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",".*/[^/]*jstl.*\\.jar$"); 

     org.eclipse.jetty.webapp.Configuration.ClassList classlist = org.eclipse.jetty.webapp.Configuration.ClassList.setServerDefault(server); 
     classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration", "org.eclipse.jetty.plus.webapp.EnvConfiguration", "org.eclipse.jetty.plus.webapp.PlusConfiguration"); 
     classlist.addBefore("org.eclipse.jetty.webapp.JettyWebXmlConfiguration", "org.eclipse.jetty.annotations.AnnotationConfiguration"); 
     server.setHandler(ctx); 
     server.start(); 
     server.join(); 
     LOG.info("Server has started in 8085 port"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

public static class DoSFilter2 extends DoSFilter 
{ 
    @Override 
    public void closeConnection(HttpServletRequest request, HttpServletResponse response, Thread thread) 
    { 
     try 
     { 
      response.getWriter().append("DoSFilter: timeout"); 
      super.closeConnection(request,response,thread); 
     } 
     catch (Exception e) 
     { 
      LOG.warn(e); 
     } 
    } 
} 

}

JConsole:

The parameter maxRequestsPerSec is not editable

JMC Snapshot (Still Cant см атрибут maxRequestsPerSec):

JMC Snapshot

ответ

1

(Испытано это только сейчас, используя DoSFilter в стандартном WebApp наряду с доступом к дереву JMX, используя jmc инструмент из стандартной установки JDK 8u112)

JMX атрибут maxRequestsPerSec на DoSFilter редактируется в Jetty 9.3.14.v20161028 уже. Примечание: это представлено как официальный атрибут JMX, вы не меняете это значение косвенно через его init-param (например, ваши снимки экрана)

В Jetty ничего не мешает редактировать.

Нет ничего лишнего, чтобы сделать возможным его редактирование.

+0

Hi Joakim, Спасибо за ответ. Не могли бы вы поделиться примером кода и снимком JConsole, который позволяет вам отредактировать его? Приветствия. – user3273841

+0

Привет, Joakim, я также проверил JMC. Я все еще не вижу атрибуты, которые я хочу редактировать. – user3273841