Why is my valve.invoke() called twice ? I have developed my own valve like in the code below. I see that the invoke() method is called twice in the same request - does anyone know why ?
Note that my trace in listValves() shows that it is only one instance of my valve AuthValve and one of 'org.apache.catalina.core.StandardEngineValve/1.0' which registered with the pipeline (there are two valves in the list). Tomcat 6.0.20 is used. Johan -- snip --- public class AuthValve extends ValveBase { public AuthValve() { } @Override public void event(Request arg0, Response arg1, CometEvent arg2) throws IOException, ServletException { } @Override public String getInfo() { return "This is the AuthValve"; } @Override public Valve getNext() { return super.getNext(); } @Override public void invoke(Request request, Response response) throws IOException, ServletException { System.out.println("valve.invoke() thread: " + Thread.currentThread().getName()); listValves(); String username = request.getHeader("h_name"); String rolename = request.getHeader("h_role"); System.out.println("valve.invoke() name:<" + username + "> role:<" + rolename + ">"); /* * Store info for LoginModule... */ NameStore.setName(username); RoleStore.setRole(rolename); getNext().invoke(request,response); } private void listValves() { Container container=this.getContainer(); if( container == null || ! (container instanceof ContainerBase) ) return; ContainerBase containerBase=(ContainerBase)container; Pipeline pipe=containerBase.getPipeline(); Valve valves[]=pipe.getValves(); System.out.println(" This valve info:" + this.getInfo() + " : " + this.toString()); for (int i = 0; i < valves.length; i++) { Valve v = valves[i]; System.out.println(" Valve " + String.valueOf(i) + " info:" + v.getInfo() + " : " + v.toString()); } } } -- end snip ---