package com.anjlab.tapestry5; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import org.apache.tapestry5.TapestryFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.anjlab.gae.ProfilingDelegate; public class LazyTapestryFilter implements Filter { private static final Logger logger = LoggerFactory.getLogger(LazyTapestryFilter.class); private Filter tapestryFilter; private FilterConfig config; public static FilterConfig FILTER_CONFIG; @Override public void init(FilterConfig config) throws ServletException { FILTER_CONFIG = config; this.config = config; ProfilingDelegate.register(); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String requestURI = ((HttpServletRequest) request).getRequestURI(); if (requestURI.startsWith("/filters/") || requestURI.equalsIgnoreCase("/favicon.ico")) { return; } if (tapestryFilter == null) { long startTime = System.currentTimeMillis(); logger.info("Creating Tapestry Filter..."); tapestryFilter = new TapestryFilter(); tapestryFilter.init(config); logger.info("Tapestry Filter created and initialized ({} ms)", System.currentTimeMillis() - startTime); } tapestryFilter.doFilter(request, response, chain); } @Override public void destroy() { tapestryFilter.destroy(); } }