Как сделать Java-приложение полностью без сохранения состояния
Я знаю, что существует много дискуссий о разнице между приложением с сохранением состояния и приложением без сохранения состояния, и что язык состояния не является тем, что делает язык программирования функций, каждый вызов функции с одинаковыми аргументами будет возвращать одинаковое значение.
Означает ли это, что объектно-ориентированный язык не способен создать приложение без сохранения состояния, поскольку каждый объект обычно имеет состояние.
Кроме того, в веб-приложении Java нам обычно требуется отслеживать состояние пользователя, и это решается сессией. Но как это сделать в распределенной системе без сохранения состояния?
Когда одна система умирает, и нам нужно, чтобы сеанс мог быть каким-то образом распознан другим сервером, так что пользовательское состояние будет перенесено. Нужно ли помещать сессию в центральную базу данных (кеш), но так ли это без сохранения состояния?
Какие вещи должны быть затронуты, кроме сессии), прежде чем мы сделаем Java-приложение без состояния?
2 ответа
Вы не храните информацию о состоянии клиента на сервере, вы передаете ее всем, кто в ней нуждается, и вы передаете ее обратно клиенту, когда серверу нужно что-то изменить. Вот что значит безгражданство, нет государства. Сервер не должен иметь никакого представления о том, в каком состоянии находится клиент, до тех пор, пока клиент не сообщит ему, что это за состояние.
Самый простой способ - сохранить информацию о сеансе в некотором хранилище значений ключей. Посмотрите здесь: Tomcat: Хранить сеанс в базе данных
Чтобы перейти к "настоящему" состоянию без состояния, сеанса вообще не должно быть. Это означает: пользователь будет проходить аутентификацию при каждом запросе и при каждом запросе вы должны проверять учетные данные. (Это очень похоже на базу данных сеанса)