Сохранение состояния с помощью удаленных EJB-компонентов и веб-служб - PullRequest
2 голосов
/ 14 июля 2009

У меня есть веб-приложение, которое использует удаленные EJB-компоненты для своей бизнес-логики. Некоторые из этих EJB-компонентов также представлены в виде веб-служб. Мне нужно сохранить небольшое состояние для некоторых из этих вызовов, чтобы последующие вызовы работали правильно. Что из следующего вы бы порекомендовали?

  • Stateful EJB (будет ли это работать с веб-сервисами?)
  • Вернуть состояние клиенту (что если я хочу предотвратить изменение состояния клиентом?)
  • Перезагружать состояние из БД по каждому методу (стоит ли беспокоиться об издержках?)

Ответы [ 2 ]

2 голосов
/ 15 июля 2009

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

Я вообще не использую Stateful Session Beans (SFSB). SFSB предназначены для сохранения состояния сеанса, но использование их через веб-сервис вызывает вопросы о том, что такое сеанс? Если у вас сложная среда развертывания или пользователи используют несколько экземпляров приложения, это может быть хрупким решением.

Состояние возврата - как показывает вопрос, могут возникнуть проблемы с безопасностью, если вы не уверены, что сервер может доверять своим клиентам. Вы можете использовать методы шифрования, чтобы убедиться, что объект состояния не был изменен, но гораздо безопаснее не передавать конфиденциальные данные потенциально враждебному клиенту. Другая ситуация, в которой это может быть полезно, - это если клиенту разрешено изменять состояние, или если клиент не может причинить вреда. Если клиентский доступ к системе всегда осуществляется через веб-уровень, это хорошее место для сохранения состояния сеанса. Веб-уровень и уровень приложений могут безопасно обмениваться объектами состояния.

Перезагрузка состояния из базы данных, вероятно, является наиболее распространенным подходом. Если вы используете объектный компонент или библиотеку Object Relational Mapping, то сервер должен иметь возможность уменьшить количество запросов к базе данных.

1 голос
/ 19 июля 2009

Единственный вариант, который у вас есть, - хранить соответствующую информацию, связанную с определенным идентификатором пользователя, в БД.

Невозможно представить компонент Statefull как Web-сервис.

В случае представления ваших Бинов как веб-сервисов вы можете попытаться отправить дополнительную информацию туда и обратно, вставив заголовок SOAP, чтобы предотвратить изменения в теле. Но в этом случае клиенты смогут изменить его.

...