Spring - Recuperando beans em uma web app

2 respostas
R

Opa pessoal

Comecei a utilizar o Spring a pouco tempo para manipular os meu beans, mais ainda não estou conseguindo recuperar a referência de outros beans dentro de uma classe java...

Por exemplo:

Depois de executado o login... se este for feito com sucesso, eu preciso acessar a sessão para guardar os dados do usuário que acabou de se logar.
A classe que efetua o login... também é um bean registrado no Spring...

Estou tentando recuperar o bean de sessão da seguinte maneira:

XmlWebApplicationContext ctx = new XmlWebApplicationContext();
		ctx.refresh();
		Session s = (Session) ctx.getBean("userSession");
		System.out.println(s);

Mais com este código não está funcionando, eu estou tendo a seguinte Exception com esse codigo:

java.lang.IllegalArgumentException: Cannot resolve ServletContextResource without ServletContext
	at org.springframework.util.Assert.notNull(Assert.java:113)
	at org.springframework.web.context.support.ServletContextResource.<init>(ServletContextResource.java:65)
	at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.getResourceByPath(AbstractRefreshableWebApplicationContext.java:199)
	at org.springframework.core.io.DefaultResourceLoader.getResource(DefaultResourceLoader.java:102)
	at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:259)
	at org.springframework.context.support.AbstractApplicationContext.getResources(AbstractApplicationContext.java:772)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:140)
	at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:123)
	at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:91)
	at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:94)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:292)
	at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:156)
	at br.com.dsystems.dsappmanager.beans.PageLogin.doLogin(PageLogin.java:66)
	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 com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:353)
	at com.opensymphony.xwork.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:208)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:182)
	at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.intercept(DefaultWorkflowInterceptor.java:125)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:32)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:32)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:32)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:32)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180)
	at com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:136)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:32)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:32)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180)
	at com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:146)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:32)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:32)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:32)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180)
	at com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:94)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180)
	at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:113)
	at com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:202)
	at com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:184)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:595)

Meu arquivo aplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"
	default-autowire="no" >

    <bean id="loginPage" class="br.com.dsystems.dsappmanager.beans.PageLogin" scope="request" />
    
    <bean id="userSession" class="br.com.dsystems.beans.Session" scope="session">
    	<property name="teste" value="Testeeee!!!"/>
    </bean>
    
    
</beans>

Estou adicionando também estes 2 Listeners ao meu web.xml

<listener>
    	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<listener>
    	<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  	</listener>

Alguem sabe o porque está dando erro ? Ou eu preciso de outro código para recuperar meus beans ?

Obrigado

Rodrigo Kerkhoff

2 Respostas

F

Tu pode implementar a interface

org.springframework.context.ApplicationContextAware

E o ApplicationContext sera injetado.

R

Valeu pela dica =]

Criado 25 de janeiro de 2007
Ultima resposta 26 de jan. de 2007
Respostas 2
Participantes 2