Что заставляет вас думать, что sessionDestroyed
is не вызывается, когда сеанс заканчивается? Или, другими словами, какая вы интерпретация того факта, что его вообще называют?
Сервлет будет обрабатывать действительность сеансов по-своему, включая тайм-ауты сеанса, а когда он определит, что сеанс больше недействителен, он вызовет ваш метод. Однако я не считаю, что сервлеты гарантируют какую-либо конкретную своевременность в этом отношении; я понимаю, что это немного похоже на сборку мусора, так как гарантировано произойдет в какой-то момент, но не обязательно в возможно более раннем случае, когда сессия станет пригодной для уничтожения.
В любом случае, кажется почти уверенным, что сервлет делает то, что вы хотите - видя, что сеанс тайм-аута и вызов соответствующего метода - вопрос только в том, будете ли вы видеть это ровно через 60 секунд после последний запрос или бит позже. Я бы предположил, что в целом вы не должны полагаться на точные тайминги, когда этот метод вызывается; используйте его, чтобы очистить ресурсы, конечно, но не для чего-то вроде правильности программы (вы получите IllegalStateExceptions
, если вы вызовете методы на недействительном сеансе). Если вы чувствуете, что действительно должны полагаться на это, возможно, объясните, что вы делаете, чтобы другие могли предложить более подходящие способы достижения этого.
Я не могу понять, что еще нужно для дизайна этого интерфейса, кроме освобождения ресурса, который занимал определенный сеанс при его уничтожении. То, что я пытаюсь сказать, не обязательно делать это в какой-то конкретной точке (например, «тайм-аут») для этой проектной цели. Это только моя точка зрения. Я не знаю, правильно ли это. Благодарю. –