Oi Pessoal, estou estudando e tentando implementar o HibernateSession como ThreadLocal.Então preciso fazer um filtro p/ apagar o que esta no ThreadLocal ao final do request…
Por gentileza, tem algum lugar ou algo especial que tem que fazer p/ um filtro??? no web.xml ??
<filter>
<filter-name>timerFilter</filter-name>
<filter-class>TimerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>timerFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Qdo coloco este filtro no web.xml parece que dá erro
org.apache.catalina.core.StandardContext start SEVERE: Error filterStart
se eu retirar este código funciona …
Se alguém souber agradeço… Valmir
só pra constar, o que estiver no ThreadLocal ja desaparece sozinho no final do request 
mas ach oque se tu colocar a classe do teu filtro em algum pacote deve resolver 
e se isto não resolver, passa a stack trace do erro que da dando pra gente que facilita bastante 
Oi Rodrigo…obrigado pela força… aparece no explorer:
HTTP Status 404 - /projeto-teste/sistemaTeste.do
type Status report
message /projeto-teste/sistemaTeste.do
description The requested resource (/projeto-teste/sistemaTeste.do) is not available.
Apache Tomcat/5.5.8
e no log do tomcat
07/07/2005 17:11:24 org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
Se não ajudar…vou pesquisar mais…Obrigado mais uma vez…
onde esta o stacktrace do erro?
SEVERE: Error loading WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@2200d5
org.apache.struts.action.ActionServlet
java.lang.ClassNotFoundException: org.apache.struts.action.ActionServlet
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1332)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1181)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1027)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:925)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3847)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4111)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:812)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:701)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:473)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1126)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1020)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at org.apache.catalina.core.StandardService.start(StandardService.java:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:683)
at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
08/07/2005 10:53:47 org.apache.catalina.core.ApplicationContext log
SEVERE: Servlet /timer threw load() exception
java.lang.ClassNotFoundException: org.apache.struts.action.ActionServlet
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1332)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1181)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1027)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:925)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3847)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4111)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:812)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:701)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:473)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1126)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1020)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at org.apache.catalina.core.StandardService.start(StandardService.java:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:683)
at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
0
[quote=urubatan]só pra constar, o que estiver no ThreadLocal ja desaparece sozinho no final do request 
[/quote]
hhmm… nao exatamente. Voce tem que setar ele para null, caso contrario os dados irao ficar em memoria. E, pior, vao ser reutilizados, devido ao pool de threads.
Rafael
Recebo um Null Pointer Exception quando tento acessar userBean.getId() na classe RevListener.
Se eu remover o UserUtil.removeUsuario() no filter o problema não ocorre. Porém, pelo que vi no post abaixo eu devo remover do contrário os dados irão ficar em memória.
Alguem pode dar um help?
Sds,
A classe contém o ThreadLocal:
public class UserUtil {
private static final ThreadLocal<Usuario> threadUsuario = new ThreadLocal<Usuario>();
public static ThreadLocal<Usuario> getThreadusuario() {
return threadUsuario;
}
public static Usuario getUsuario(){
return threadUsuario.get();
}
public static void setUsuario(Usuario usuario){
threadUsuario.set(usuario);
}
public static void removeUsuario(){
threadUsuario.remove();
}
}
O filter:
public class UserFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void destroy() {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
try {
HttpServletRequest request = (HttpServletRequest) servletRequest;
filterChain.doFilter(servletRequest, servletResponse);
Usuario userBean = (Usuario) request.getSession().getAttribute("usuario");
UserUtil.setUsuario(userBean);
}catch (Exception e) {
e.printStackTrace();
}finally{
[b]UserUtil.removeUsuario();[/b]
}
}
}
A classe que utiliza o usuário “capturado” pelo filter:
public class RevListener implements org.hibernate.envers.RevisionListener{
@Override
public void newRevision(Object revisionEntity) {
try{
EnversRevinfo rev = (EnversRevinfo) revisionEntity;
Usuario userBean = UserUtil.getUsuario();
[b]rev.setUser_id(userBean.getId());[/b]
}catch (Exception e) {
e.printStackTrace();
}
}
}