I'm newbie in developing with GWT. I started to maintain a GWT (2.7) application and need to revise the logging. So I decided to make use of MDC (MappedDiagnosticContext) and wrote a servlet Filter to put the user name in MDC, like this:
public class MDCServletFilter implements Filter {
/* (non-Javadoc)
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {}
/* (non-Javadoc)
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest aRequest, ServletResponse aResponse, FilterChain aFilterChain)
throws IOException, ServletException {
try {
// get the session from the request ...
HttpServletRequest tempRequest = (HttpServletRequest)aRequest;
HttpSession tempSession = tempRequest.getSession();
// get the currently logged in user ...
String tempUser = (String)tempSession.getAttribute(Authorizer.USER_KEY);
// if user is logged in, put the name into the MDC ...
if (tempUser != null && tempUser.trim().length() > 0) {
MDC.put(Authorizer.USER_KEY, tempUser);
}
// at least call the other filter ..
aFilterChain.doFilter(tempRequest, aResponse);
} finally {
// finally remove the user name from the MDC ...
MDC.remove(Authorizer.USER_KEY);
}
}
/* (non-Javadoc)
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig arg0) throws ServletException {}
}
The web.xml:
<web-app>
<!-- MDC Filter -->
<filter>
<filter-name>MDCServletFilter</filter-name>
<filter-class>
foo.bar.filter.MDCServletFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>MDCServletFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- MDC Filter END -->
Now when I start the application in my eclipse (June) I get the warning:
[WARN] Server class 'foo.bar.filter.MDCServletFilter' could not be found in the web app, but was found on the system classpath
The filter class resides in a "common" project, not in the GWT project, because we have some more GWT projects which make use of some common classes. If I put the filter class in to the GWT project, no warning occur.
So, how do I have to setup the GWT project to use other project's classes without any warnings?
Thanks in advance!
The details depend on your build tool and/or IDE, but the goal is to have all server-side classes in the webapp's
WEB-INF
(either inWEB-INF/classes
, which is probably the case for your GWT project, or in a JAR inWEB-INF/lib
).This will be necessary anyway when deploying the webapp to a servlet container (unless you intend to deploy your "common" project as a shared lib in your servlet container).