Все три предложенных решения могут быть реализованы, но лучшее решение будет зависеть от деталей вашего приложения.
Я вообще не использую Stateful Session Beans (SFSB). SFSB предназначены для сохранения состояния сеанса, но использование их через веб-сервис вызывает вопросы о том, что такое сеанс? Если у вас сложная среда развертывания или пользователи используют несколько экземпляров приложения, это может быть хрупким решением.
Состояние возврата - как показывает вопрос, могут возникнуть проблемы с безопасностью, если вы не уверены, что сервер может доверять своим клиентам. Вы можете использовать методы шифрования, чтобы убедиться, что объект состояния не был изменен, но гораздо безопаснее не передавать конфиденциальные данные потенциально враждебному клиенту. Другая ситуация, в которой это может быть полезно, - это если клиенту разрешено изменять состояние, или если клиент не может причинить вреда. Если клиентский доступ к системе всегда осуществляется через веб-уровень, это хорошее место для сохранения состояния сеанса. Веб-уровень и уровень приложений могут безопасно обмениваться объектами состояния.
Перезагрузка состояния из базы данных, вероятно, является наиболее распространенным подходом. Если вы используете объектный компонент или библиотеку Object Relational Mapping, то сервер должен иметь возможность уменьшить количество запросов к базе данных.