Глобальная переменная на пользователя в веб-сервисе - PullRequest
1 голос
/ 04 мая 2011

У меня есть веб-служба SOAP без сохранения состояния (Java, Spring, Tomcat).

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

Как я могу это сделать? если единственный способ сделать это с помощью областей применения бобов, то какая область лучше прототипа или одной модели и почему?

спасибо

Ответы [ 2 ]

3 голосов
/ 04 мая 2011

Spring bean scope может быть использован для этого.

область сеанса

пример:

<bean id="customerService" class="com.customer.services.CustomerService" 
     scope="session"/>
2 голосов
/ 04 мая 2011

(Это не ответ на исходный вопрос, но попытка ответить на некоторые дополнительные вопросы из области комментариев)

A Сессионный компонент может быть без состояния или 1008 * Stateful *.Если это без состояния , он принимает запрос, отправляет ответ (возможно) и впоследствии уничтожается.В сеансе stateful хранятся некоторые параметры ( state ), которые можно повторно использовать для других вызовов методов - например, bean-компонент, который просто подсчитывает, как часто он вызывается.

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

Это отличается для асинхронных веб-служб : служба получает запрос и либо

  • получает URL-адрес обратного вызова или
  • отвечает с идентификатором сеанса

В любом случае - клиент не будет ждать ответа, но продолжит,пока он не получит ответ, либо потому, что

  • служба отправила ответ на метод обратного вызова клиента или
  • у клиентаопрашивал несколько раз с использованием идентификатора сеанса и, в конце концов, опрашивал ответ службы.

Асинхронный сервис похож на запуск потока Java: вы запускаете его, продолжаете свою работу и в какой-то момент получаете результат (илиуведомление о том, что результат готов)

Асинхронной службе требуется какое-то постоянное хранилище для хранения идентификатора сеанса или URL обратного вызова , а thСервисный сеанс активен. сеанс службы с состоянием, сессионные компоненты , необходимые для службы, могут быть без состояний .

...