2015-02-19 3 views
2

Наш проект имеет пакетный процесс, который планируется запустить при запуске сервера, а затем каждые 24 часа. Ниже приведена конфигурация в файле весны.Невозможно понять: «Сфера действия« сеанс »неактивна для текущего потока»

<bean id="RenewalBatchSvc" class="com.rsaame.pas.renewals.scheduler.RenewalBatchService" > 
      <property name="renewalBatchSchedulerSvc" ref="RenewalBatchSchedulerSvc" /> 
    </bean> 

    <bean id="RenewalBatchScheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"> 
     <!-- wait 20 seconds before starting repeated execution --> 
     <property name="delay" value="20000" /> 
     <!-- run every 24 hrs 86400000--> 
     <property name="period" value="86400000" /> 
     <property name="timerTask" ref="RenewalBatchSvc" /> 
    </bean> 

    <bean id="RenewalBatchTimerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean"> 
     <property name="scheduledTimerTasks"> 
      <list>    
       <ref bean="RenewalBatchScheduledTask" /> 
      </list> 
     </property> 
    </bean> 

Что эта партия процесс не является, он принимает все политики, которые должны быть возобновлены, с пакетной таблицы, и возобновить их. Каждая политика берется, затем вызывается процесс продления. В процессе обновления мы используем bean-компонент, называемый «location», который определяется как сеанс. ниже - определение.

<bean id="location" class="com.mindtree.ruc.cmn.utils.LoginLocation" scope="session"> 
    <aop:scoped-proxy/> 
</bean> 

Мы не используем DispatcherServlet, но мы используем контекстную слушателя, как это определено в ниже (в web.xml):

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

Ошибка:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.location': 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:341) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192) 
    at org.springframework.aop.target.SimpleBeanTargetSource.getTarget(SimpleBeanTargetSource.java:33) 
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.getTarget(Cglib2AopProxy.java:653) 
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:604) 
    at com.mindtree.ruc.cmn.utils.LoginLocation$$EnhancerByCGLIB$$db19ad5f.getLocation(<generated>) 
    at com.mindtree.ruc.cmn.utils.LocationHandler.getLocation(LocationHandler.java:17) 
    at com.mindtree.ruc.cmn.utils.Utils.getSingleValueAppConfig(Utils.java:707) 

Вопрос: The выше исключения не произойдет, когда пакетный процесс запускается при запуске сервера. Но это происходит только тогда, когда пакет вызывается через 24 часа. Почему это так ? Если исключение приходит, то оно должно появиться даже в том случае, когда пакет запускается при запуске сервера IBM Websphere. Почему сеанс доступен при запуске сервера еще до того, как приложение полностью встало, и никто его не использует.

(В тех местах, где мы определяем beans как область сеанса/запроса, но мы используем эти бобы во время запуска сервера (сеанса или запроса еще нет), , почему пружина не будет выбрасывать исключение?)

ответ

Смежные вопросы