【发布时间】:2015-06-11 09:40:26
【问题描述】:
大家早上好,
我有一个 spring 集成邮件模块,用于收听收到的电子邮件。
我想将此模块移动到 Web 应用程序中,以便我可以从 Web 应用程序干净地启动和停止适配器。
我现在面临的问题是我处理电子邮件的程序需要一个会话范围变量。 (在该程序的非 Web 版本中,它使用单例。由于应用程序基于 Web 的性质,我现在需要将此数据存储在会话中(值将取决于用户)。
当我从电子邮件处理程序访问这个会话变量时,我有一个异常告诉当前线程的 Scope 'session' 不是活动的。
我了解 Spring 集成可能已经创建了自己的线程,并且该线程无法访问 Web 会话。
我对从会话访问的对象有这个配置:
<bean id="localManager" class="com.xxx.ManagerImpl" scope="session">
<aop:scoped-proxy proxy-target-class="false" />
</bean>
处理电子邮件的 bean,需要 localManager bean:
<int:service-activator id="serviceActivator" input-channel="receiveChannel" ref="mailService" method="handleMail"/>
在handleMail方法中,我正在访问localManager:
@Autowired
@Qualifier(value="localManager")
private Manager manager;
这是在调用管理器上的方法时出现异常 Scope 'session' is not active for current thread。
是否可以让两者一起工作并让电子邮件管理线程访问会话范围的变量?
PS:我的 Web 应用程序(JSF 应用程序)中有其他 bean 访问 localManager 没有任何问题。这确实特定于集成线程
谢谢
吉尔
【问题讨论】:
-
那永远行不通。它如何访问会话,它是一个后台轮询过程,它对它运行的应用程序一无所知,更不用说它在 Web 应用程序中运行了。
标签: spring spring-integration email