Sunday 15 January 2012

Spring SimpleThreadScope registered but not found when AbstractBeanFactory.doGetBean() is called -



Spring SimpleThreadScope registered but not found when AbstractBeanFactory.doGetBean() is called -

update: farther debugging, can see when abstractbeanfactory.dogetbean() called "thread" exists in parentbeanfactory.scopes not in scopes bean mill (presumably webapplicationcontext).

i have simple spring mvc webapp configured much spring-petclinic application. i'm trying utilize simplethreadscope (yes aware of caveats, , don't want utilize request scope), not working expected.

first, tried using thread scoped bean controller use. found different threads sharing same instance of bean. tried declaring controller beingness thread scoped using annotation @scope(value="thread").

using eclipse/sts debugger, can see customscopeconfigurer working correctly , registering simplethreadscope under key "thread". subsequently when servicing web request, exception thrown stating no scope registered scope 'thread':

severe: servlet.service() servlet audit threw exception java.lang.illegalstateexception: no scope registered scope 'thread' @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:333) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:198) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:271) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:193) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.findautowirecandidates(defaultlistablebeanfactory.java:1021) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.doresolvedependency(defaultlistablebeanfactory.java:964) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.resolvedependency(defaultlistablebeanfactory.java:862) @ org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor$autowiredfieldelement.inject(autowiredannotationbeanpostprocessor.java:494) @ org.springframework.beans.factory.annotation.injectionmetadata.inject(injectionmetadata.java:87) @ org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor.postprocesspropertyvalues(autowiredannotationbeanpostprocessor.java:298) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.populatebean(abstractautowirecapablebeanfactory.java:1186) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:537) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:475) @ org.springframework.beans.factory.support.abstractbeanfactory$2.getobject(abstractbeanfactory.java:341) @ org.springframework.context.support.simplethreadscope.get(simplethreadscope.java:67) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:336) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:193) @ org.springframework.context.support.abstractapplicationcontext.getbean(abstractapplicationcontext.java:975) @ org.springframework.web.method.handlermethod.createwithresolvedbean(handlermethod.java:219) @ org.springframework.web.servlet.handler.abstracthandlermethodmapping.gethandlerinternal(abstracthandlermethodmapping.java:257) @ org.springframework.web.servlet.handler.abstracthandlermethodmapping.gethandlerinternal(abstracthandlermethodmapping.java:57) @ org.springframework.web.servlet.handler.abstracthandlermapping.gethandler(abstracthandlermapping.java:299) @ org.springframework.web.servlet.dispatcherservlet.gethandler(dispatcherservlet.java:1098) @ org.springframework.web.servlet.dispatcherservlet.dodispatch(dispatcherservlet.java:910) @ org.springframework.web.servlet.dispatcherservlet.doservice(dispatcherservlet.java:870) @ org.springframework.web.servlet.frameworkservlet.processrequest(frameworkservlet.java:961) @ org.springframework.web.servlet.frameworkservlet.doget(frameworkservlet.java:852) @ javax.servlet.http.httpservlet.service(httpservlet.java:617) @ org.springframework.web.servlet.frameworkservlet.service(frameworkservlet.java:837) @ javax.servlet.http.httpservlet.service(httpservlet.java:723) @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:290) @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206) @ org.springframework.web.filter.hiddenhttpmethodfilter.dofilterinternal(hiddenhttpmethodfilter.java:77) @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107) @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:235) @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206) @ org.springframework.web.filter.characterencodingfilter.dofilterinternal(characterencodingfilter.java:88) @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107) @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:235) @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206) @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:233) @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:191) @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:127) @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:103) @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:109) @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:293) @ org.apache.coyote.http11.http11processor.process(http11processor.java:861) @ org.apache.coyote.http11.http11protocol$http11connectionhandler.process(http11protocol.java:606) @ org.apache.tomcat.util.net.jioendpoint$worker.run(jioendpoint.java:489) @ java.lang.thread.run(thread.java:724)

after bit more debugging found when abstractbeanfactory.dogetbean() called "thread" exists in parentbeanfactory.scopes not in scopes bean mill (presumably webapplicationcontext).

so solution seems to configure customscopeconfigurer both webapplicationcontext , it's parent context. e.g. in both dispatcherservlet application context config , in context specified contextloaderlistener. doing ensure scope registered both bean factories.

spring spring-3

No comments:

Post a Comment