I have a simple filter defined in web.xml like this.
<filter>
<filter-name>ThrottlingFilter</filter-name>
<filter-class>com.xyz.filters.ThrottlingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ThrottlingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
and my code looks like below. In my test below, i wanted to allow only 2
simultaneous connections to my page. I put an artificial sleep in my
servlets and made 5 concurrent requests but the filter logic doesn't kick
in. The connectionCount seems to be 0 for all the servlet requests. Can
anyone suggest what's wrong?
public class ThrottlingFilter implements Filter
{
private static final String
CONNECTION_NOT_ALLOWED_REACHED_MAXIMUM_NUMBER_OF_CONNECTIONS =
"Connection not allowed: reached maximum number of connections";
private static final Logger log = Logger.getLogger(ThrottlingFilter.class
.getName());
private int connectionCount = 0;
private int max_connection_count = 2;
public void destroy()
{}
public void init(FilterConfig config)
{}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException
{
final boolean allowed;
final HttpServletRequest httpRequest = (HttpServletRequest) request;
final HttpServletResponse httpResponse = (HttpServletResponse)
response;
synchronized (this)
{
allowed = connectionCount < max_connection_count;
log.info("connectionCount = " + connectionCount + ";
max_connection_count = " + max_connection_count);
if (allowed)
{
++connectionCount;
log.info("connectionCount = " + connectionCount + "; in allowed
block");
}
}
if (!allowed) {
log.info(CONNECTION_NOT_ALLOWED_REACHED_MAXIMUM_NUMBER_OF_CONNECTIONS
);
httpResponse.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE,
CONNECTION_NOT_ALLOWED_REACHED_MAXIMUM_NUMBER_OF_CONNECTIONS);
return;
}
try
{
chain.doFilter(httpRequest, httpResponse);
}
finally
{
synchronized (this)
{
if (--connectionCount < 0)
{
connectionCount = 0;
}
log.info("connectionCount = " + connectionCount + "; in finally
block");
}
}
}
}
--
You received this message because you are subscribed to the Google Groups
"Google App Engine for Java" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/google-appengine-java/-/ogFIUgw2wlEJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine-java?hl=en.