2015-06-11 5 views
1

Доброе утро, все,Весенние интеграционные переменные и переменные сеанса

У меня есть модуль интеграции весны, который я использую для прослушивания входящих писем.

Я хотел перенести этот модуль в веб-приложение, чтобы я мог полностью запустить и остановить адаптеры из веб-приложения.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что для моей электронной почты, обрабатывающей электронную почту, требуется переменная области сеанса. (В не-веб-версии этой программы он использовал одноэлементный режим. Мне теперь нужны эти данные для хранения в сеансе из-за веб-характера приложения (значение будет зависеть от пользователя)).

И когда я получаю доступ к этой переменной сеанса из программы обработки электронной почты, у меня есть исключение, указывающее, что Scope 'session' неактивен для текущего потока.

Я понимаю, что интеграция Spring могла создать собственный поток и что этот поток не может получить доступ к веб-сессии.

У меня есть эта конфигурация для объекта доступа из сеанса: обработки

<bean id="localManager" class="com.xxx.ManagerImpl" scope="session"> 
    <aop:scoped-proxy proxy-target-class="false" /> 
</bean> 

боба сообщения электронной почты, и нуждающегося в localManager боб:

<int:service-activator id="serviceActivator" input-channel="receiveChannel" ref="mailService" method="handleMail"/> 

в рамках метода handleMail, я доступ localManager:

@Autowired 
@Qualifier(value="localManager") 
private Manager manager; 

Это когда вы вызываете метод на m anager, что у меня есть исключение Scope 'session' неактивен для текущего потока.

Возможно ли, чтобы эти два человека работали вместе и имели ли поток управления электронной почтой переменную с сессией?

PS: У меня есть другие бобы в моем веб-приложении (приложение JSF), доступ к локальному менеджеру без каких-либо проблем. Это действительно специфичны для интеграции нити

Благодаря

Жиль

+0

Это никогда не сработает. Как он может получить доступ к сеансу, это обработчики фонового опроса, которые ничего не знают о запущенном им приложении, не говоря уже о том, что он работает в веб-приложении. –

ответ

1

Попытка упаковать 2 вместе не может быть проще всего сделать ...

Но если вы хотите контролировать свой Весенний интеграционный модуль от webapp, почему бы вам не добавить входящий адаптер (возможно, http-inbound) в ваш модуль интеграции с пружиной? Затем все, что вам нужно сделать в вашем webapp, - это выполнить HTTP-вызов в эту конечную точку, передавая параметры, специфичные для пользователя, вашему модулю интеграции Spring в качестве части HTTP-запроса.

При приеме входящего запроса HTTP ваш модуль пружины может разобрать сообщение и отправить сообщение на шине управления для запуска/остановки предполагаемых компонентов.

я сделал что-то очень похожее с RMI въездного шлюза:

<int-rmi:inbound-gateway request-channel="rmiIncomingRequestChannel" /> 

<int:channel id="rmiIncomingRequestChannel" /> 

<int:service-activator method="myModuleInterfaceAction" 
    input-channel="rmiIncomingRequestChannel" ref="rmiToControlMessage" /> 

<bean id="rmiToControlMessage" 
    class="myModule.rmi.controller.impl.RmiInterfaceControllerImpl"> 
    <property name="controlChannel" ref="controlChannel" /> 
</bean> 

<int:channel id="controlChannel" /> 

<int:control-bus input-channel="controlChannel" /> 

Согласно документации (http://docs.spring.io/spring-integration/reference/html/http.html) он выглядит как вам придется развернуть Spring модуль интеграции в Tomcat, чтобы иметь возможность иметь http-прослушиватель.Или это, вероятно, то, что Spring Boot может решить для вас, со встроенным tomcat в вашей банке.

+0

Большое спасибо. Отлично. В некотором роде, близком к тому, что у меня было в первую очередь, когда веб-приложение отправляло только начальные/конечные сообщения в модуль, но не думал о отправке параметров ... Мой вопрос тогда: я могу отправить параметры в конечную точку, но как могу ли я передать этот параметр в мой почтовый сервис (ref = mailService)? Спасибо – Gilles

+0

В отрывке, который я предоставил, так же, как я ввел controlChannel в rmiToControlMessage, вы можете подключить свой почтовый сервис и действовать на нем на основе полученных вами сообщений. –

+0

Это то, что я сделал. Это хорошо работает. Большое вам спасибо. – Gilles