Filter e web.xml

6 respostas
V

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

6 Respostas

urubatan

só pra constar, o que estiver no ThreadLocal ja desaparece sozinho no final do request :smiley:

mas ach oque se tu colocar a classe do teu filtro em algum pacote deve resolver :smiley:
e se isto não resolver, passa a stack trace do erro que da dando pra gente que facilita bastante :smiley:

V

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…

urubatan

onde esta o stacktrace do erro?

V
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
Rafael_Steil

urubatan:
só pra constar, o que estiver no ThreadLocal ja desaparece sozinho no final do request :smiley:

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

A

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();
		}
		
	}
	
}
Criado 7 de julho de 2005
Ultima resposta 14 de set. de 2012
Respostas 6
Participantes 4