VRaptor 3 Annotations + AspecTJ + Spring [RESOLVIDO]

20 respostas
J

Boa Tarde, estou usando AspectJ e VRaptor 3 aqui na minha aplicacao estou tendo o seguinte problema

Meu Codigo seu eu desabilitar o @Component do vraptor funciona ele consegue mandar LoginModule.class para classe Seguranca.class

@org.springframework.stereotype.Component
//@Component
@SessionScoped
public class LoginModule {
}


@Aspect
@Component
public class Seguranca {
   private LoginModule loginModule;
     @Autowired
   public void setLoginModule(LoginModule loginModule) {
       this.loginModule = loginModule;
       System.out.println(this.loginModule == null)   //saida false
   }
}

Agora se eu habilitar o @Component do vraptor nao funciona ele nao consegue mandar LoginModule.class para classe Seguranca.class

@org.springframework.stereotype.Component
@Component
@SessionScoped  public class LoginModule {
}


@Aspect
@Component
public class Seguranca {
   private LoginModule loginModule;
     @Autowired
   public void setLoginModule(LoginModule loginModule) {
       this.loginModule = loginModule;
       System.out.println(this.loginModule == null)   //saida true
   }
}

Me parece que esta com problema de inicializacao do objeto a ordem quem inicializa primeiro tem como resolver isso

Obrigado !!!
Joao Vitor

20 Respostas

Lucas_Cavalcanti

tira o @Component do spring e vê se dá algum erro… ele só tá dando null?

J

se eu tirar @Component do spring de LoginModule.class para de funcionar a classe Seguranca.class que e um AspectJ entende la ela recebe LoginModule.class para validar as Regras(roles).

Exception :
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'seguranca': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void br.com.tms.spring.aop.Seguranca.setLoginModule(br.com.tms.definindoseguranca.LoginModule); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [br.com.tms.definindoseguranca.LoginModule] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
   at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1055)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
   at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:562)
   at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:871)
   at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
   at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
   at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
   at br.com.caelum.vraptor.ioc.spring.DefaultSpringLocator.getApplicationContext(DefaultSpringLocator.java:41)
   at br.com.caelum.vraptor.ioc.spring.SpringProvider.getParentApplicationContext(SpringProvider.java:107)
   at br.com.caelum.vraptor.ioc.spring.SpringProvider.start(SpringProvider.java:79)
   at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:110)
   at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:103)
   at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
   at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
   at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
   at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3800)
   at org.apache.catalina.core.StandardContext.start(StandardContext.java:4450)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
   at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
   at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
   at org.apache.catalina.core.StandardService.start(StandardService.java:516)
   at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
   at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
   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:597)
   at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
   at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void br.com.tms.spring.aop.Seguranca.setLoginModule(br.com.tms.definindoseguranca.LoginModule); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [br.com.tms.definindoseguranca.LoginModule] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
   at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:608)
   at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84)
   at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:283)
   ... 35 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [br.com.tms.definindoseguranca.LoginModule] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
   at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:901)
   at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:770)
   at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:685)
   at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:559)

Obrigado !!!
Joao Vitor

Lucas_Cavalcanti

bom… vc vai ter que deixar só as anotações de registro do Spring então…

o problema é que as classes que usam o AspectJ estão do lado do Spring… o lado do Spring não consegue enxergar o lado do VRaptor… mas o lado do VRaptor consegue enxergar o lado do Spring…

pra anotação @Component do Spring funcionar vc precisa colocar o component-scan do spring no seu applicationContext.xml:

o @SessionScoped do vraptor não vai funcionar tb… então vc vai ter que usar a configuração respectiva do spring

J

Lucas Cavalcanti:
bom… vc vai ter que deixar só as anotações de registro do Spring então…

o problema é que as classes que usam o AspectJ estão do lado do Spring… o lado do Spring não consegue enxergar o lado do VRaptor… mas o lado do VRaptor consegue enxergar o lado do Spring…

pra anotação @Component do Spring funcionar vc precisa colocar o component-scan do spring no seu applicationContext.xml:

o @SessionScoped do vraptor não vai funcionar tb… então vc vai ter que usar a configuração respectiva do spring

No aplicationContext.xml ja esta no scan do pacote, mas nao entendi como vou fazer configuração respectiva do spring como posso fazer tem como me mostrar um exemplo.

Obrigado !!!
Joao Vitor

Lucas_Cavalcanti

algo assim:

http://static.springsource.org/spring/docs/2.0.x/reference/beans.html#beans-factory-scopes-request

de qqer forma, o q acontece? ele só fica null, não dá erro nenhum?

J

Lucas Cavalcanti:
algo assim:

http://static.springsource.org/spring/docs/2.0.x/reference/beans.html#beans-factory-scopes-request

de qqer forma, o q acontece? ele só fica null, não dá erro nenhum?

tirei do todas as anotacao do meu LoginModule @ScopedSession e @Component VRAptor

registrei no meu applicationContext.xml

<bean id="br.com.tms.definindoseguranca.LoginModule" class="br.com.tms.definindoseguranca.LoginModule" scope="session"/>

E estou recebeno uma exception:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'autorizacaoInterceptor': Scope 'request' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No Scope registered for scope 'session'
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:338)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:386)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:376)
	org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1109)
	org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
	br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:253)
	br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
	br.com.caelum.vraptor.util.collections.Functions$1.apply(Functions.java:32)
	br.com.caelum.vraptor.util.collections.Functions$1.apply(Functions.java:30)
	com.google.common.collect.Lists$TransformingRandomAccessList.get(Lists.java:431)
	java.util.AbstractList$Itr.next(AbstractList.java:345)
	com.google.common.collect.Iterators$7.computeNext(Iterators.java:602)
	com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:135)
	com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:130)
	com.google.common.collect.Lists.newArrayList(Lists.java:131)
	com.google.common.collect.Collections2$FilteredCollection.toArray(Collections2.java:219)
	br.com.caelum.vraptor.interceptor.DefaultInterceptorRegistry.interceptorsFor(DefaultInterceptorRegistry.java:50)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:42)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)

root cause

java.lang.IllegalStateException: No Scope registered for scope 'session'
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:265)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:825)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:767)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:685)
	org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:771)
	org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:691)
	org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:191)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:888)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
	org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:386)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:376)
	org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1109)
	org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
	br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:253)
	br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
	br.com.caelum.vraptor.util.collections.Functions$1.apply(Functions.java:32)
	br.com.caelum.vraptor.util.collections.Functions$1.apply(Functions.java:30)
	com.google.common.collect.Lists$TransformingRandomAccessList.get(Lists.java:431)
	java.util.AbstractList$Itr.next(AbstractList.java:345)
	com.google.common.collect.Iterators$7.computeNext(Iterators.java:602)
	com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:135)
	com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:130)
	com.google.common.collect.Lists.newArrayList(Lists.java:131)
	com.google.common.collect.Collections2$FilteredCollection.toArray(Collections2.java:219)
	br.com.caelum.vraptor.interceptor.DefaultInterceptorRegistry.interceptorsFor(DefaultInterceptorRegistry.java:50)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:42)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
Lucas_Cavalcanti

acho que vc precisa registrar o contextListener do spring no web.xml… (google it)

J

web.xml inseri as seguintes linhas

<context-param>  
		<param-name>contextConfigLocation</param-name>  
		<param-value>classpath:/applicationContext.xml</param-value>  
	</context-param> 

	<listener>
    	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  	</listener>
  	
	<listener>
    	<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  	</listener>
  	
	<filter>
		<filter-name>requestContext</filter-name>
	    <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
	</filter>

agora estou recebendo a seguinte exception

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'seguranca': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void br.com.tms.spring.aop.Seguranca.setLoginModule(br.com.tms.definindoseguranca.LoginModule); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'br.com.tms.definindoseguranca.LoginModule': Scope 'session' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1055)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:562)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:871)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
	at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:272)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:196)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
	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:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void br.com.tms.spring.aop.Seguranca.setLoginModule(br.com.tms.definindoseguranca.LoginModule); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'br.com.tms.definindoseguranca.LoginModule': Scope 'session' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:608)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:283)
	... 28 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'br.com.tms.definindoseguranca.LoginModule': Scope 'session' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:338)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:825)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:767)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:685)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:559)
	... 30 more
Caused by: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
	at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:123)
	at org.springframework.web.context.request.SessionScope.get(SessionScope.java:90)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
	... 35 more
Lucas_Cavalcanti

em que parte do sistema vc tá usando esse login module? É durante uma requisição?

J

Lucas eu consegui resolver desta forma no LoginModule.class colquei @Component e @Scope(value=“session”) e na Seguranca.class que e um AspectJ @Ascpect @Component eu acrescentei tambem @Scope(value=“session”) so que nao entendi muito bem acho que como LoginModule.class esta com @Scope ou seja escopo de sessao a Segurancao que esta esperando um logimModule via @Autowired tem que tambem estar em escopo nao sei se e isso se puder me explicar melhor agradeço.

Ficou assim

LoginModule.class

@org.springframework.stereotype.Component
@org.springframework.context.annotation.Scope(value="session")
public class LoginModule {
	private User user;
	private HashMap<String, Role> mapeamentoRole;   
	
	
	public void login(User user) {
		// TODO Auto-generated method stub
		validateUser(user);
	}
	
	public void logout() {
		// TODO Auto-generated method stub
		this.mapeamentoRole = null;
		this.user = null;
	}
	
	public boolean isNotLogged() {
		// TODO Auto-generated method stub
		return (this.user == null);
	}
}

Seguranca.class

@Aspect
@Component
@Scope(value="session")
public class Seguranca {
	private LoginModule loginModule;
	
	@Autowired
	public void setLoginModule(LoginModule loginModule) {
		this.loginModule = loginModule;
	}
		
	@Around("metodosGenericoController(clazz)")
    public Object profile(ProceedingJoinPoint proceedJoinPoint, Object clazz) throws Throwable  {
		sw.start(proceedJoinPoint.getSignature().getName());
		return proceedJoinPoint.proceed();
	}
	
	@Before("metodosGenericoController(clazz)")
	public void logAntesDaoGenerico(JoinPoint joinPoint, Object clazz) throws Throwable {
	}

	@AfterReturning(pointcut="metodosGenericoController(clazz)", returning = "retorno")
	public void logDepoisDaoGenerico(JoinPoint joinPoint, Object retorno, Object clazz) {
	}
	
	@Pointcut("execution (* br.com.tms.spring.dao.DaoHibernate.*(..)) && args(clazz,..)")
	public void metodosGenericoController(Object clazz) {
		// TODO Auto-generated method stub
	}
}

Se tiver uma outra solucao poste ai

Obrigado !!!
Joao Vitor

Lucas_Cavalcanti

se vc não coloca o @Scope no Segurança, ele usa o escopo padrão do Spring, que é o Singleton, se eu não me engano… e o singleton não é compatível com o session…

o singleton é criado uma vez só no sistema, na primeira vez que é usado… o de session é criado a cada usuário do sistema, logo não dá pra fazer um singleton depender de um session scoped…

o segurança não precisa ser session, mas precisa ser de escopo menor (session, request ou prototype)

J

lucas nao entendi o que vc falou ai tem que ser de escopo ok mas nao precisa ser session ai vc diz, mas precisa ser de escopo menor (session,request ou prototype) ou seja o @Scope precisa colocar mas o (value=“session”) nao ?

Lucas_Cavalcanti

vc precisa colocar o @Scope, mas o value não precisa ser necessariamente session…

se faz sentido instanciar o bean 1 vez por usuário, deixe session, se faz sentido instanciar toda requisição, deixe request, se faz sentido instanciar toda hora, deixe prototype

J

Lucas Cavalcanti:
vc precisa colocar o @Scope, mas o value não precisa ser necessariamente session…

se faz sentido instanciar o bean 1 vez por usuário, deixe session, se faz sentido instanciar toda requisição, deixe request, se faz sentido instanciar toda hora, deixe prototype

Ok entendi valeu pela dica no meu caso seria melhor deixar session o que vc acha ?

Lucas_Cavalcanti

pode deixar session, mas não tenho certeza de qual é o seu caso :wink:

J

Ok obrigado !!!
Joao Vitor

Yokomizo

Estou tentando implementar isso também só que o joinpoint é um método do controller anotado com @Resource do vraptor3

recebo:

01/06/2010 14:55:21 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'multipartInterceptor': Unsatisfied dependency expressed through constructor argument with index 0 of type [javax.servlet.http.HttpServletRequest]: : Error creating bean with name 'httpServletRequestProvider': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'httpServletRequestProvider': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:591)
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:193)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:925)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:835)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
	at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:302)
	at org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:308)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:297)
	at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:942)
	at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:224)
	at br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:253)
	at br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:47)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
	at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:47)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:619)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'httpServletRequestProvider': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport$1.run(FactoryBeanRegistrySupport.java:127)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:116)
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:98)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1285)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:275)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:671)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:610)
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:622)
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:584)
	... 36 more
Caused by: java.lang.NullPointerException
	at br.com.caelum.vraptor.ioc.spring.HttpServletRequestProvider.getObject(HttpServletRequestProvider.java:37)
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport$1.run(FactoryBeanRegistrySupport.java:121)
	... 47 more

tanto o controller como o aspect estão anotados como component… já tentei usar @Component do vraptor e do spring, mas não deu… tentei usar os 2 juntos, tbm não deu… tentei usar um em um e outro em outro, e também não vai…

meu controleler

@Resource
@org.springframework.stereotype.Component
//@br.com.caelum.vraptor.ioc.Component
public class DefaultController {

	
	public DefaultController(){
	}
	
	@Get
	@Path("/")
	public void index(){
		System.out.println("Executar index...");
	}
	
}

aspect

@Aspect
//@org.springframework.stereotype.Component
@br.com.caelum.vraptor.ioc.Component
public class Teste {

	@Pointcut("execution(public * index(..))")
	public void testepc(){}
	
	@Before("testepc()")
	public void wow(){
		System.out.println("WWWOOOWWW");
	}
	
}
<?xml version="1.0" encoding="UTF-8" ?>
<beans default-autowire="no"
	xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	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
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

	<aop:aspectj-autoproxy />
	<bean id="defaultController" class="br.caminho.controller.DefaultController" />
	<bean id="testeAspect" class="br.caminho.aspect.Teste" />

</beans>

primeira vez que tento fazer isso, então acho que posso ter pulado algum passo

Lucas_Cavalcanti

vc não deveria declarar o DefaultController no applicationContext…

talvez nem o seu aspect, teoricamente a anotação @Aspect jah faz a declaração…

a única coisa eh que talvez vc tenha que colocar alguma tag pra ele ler todas as anotações…

tenta procurar pela tag <…:component-scan base=“seu.base.package”/>, pois sem ela o spring não lê anotações

Yokomizo

Lucas,

resolvi usando @Component do vraptor no aspect e no controller… tirando esse arquivo context… acho que agora só estou usando spring via vraptor… mas agora estou com otro problema, mas eu já abri outro tópico. Valeu!

J

Desculpe a demora a responder passe o poste da outra duvida ai caso ainda nao resolveu.

ok

Criado 31 de março de 2010
Ultima resposta 2 de jun. de 2010
Respostas 20
Participantes 3