Как получить доступ к состоянию сеанса в стандартном классе Java? - PullRequest
2 голосов
/ 01 октября 2010

Мне нужен механизм для чтения состояния сеанса из класса Java, без необходимости передавать какие-либо аргументы (включая HttpRequest) классу. Причина в том, что класс находится на расстоянии 1-3 вызовов от сервлета, и я не хочу загрязнять список аргументов метода дополнительным аргументом для каждого вызова. У меня в основном такая же проблема этих парней: http://forums.sun.com/thread.jspa?threadID=5124189

Для которого, по-видимому, в настоящее время Java не имеет решения ..

Приветствия

Ответы [ 4 ]

4 голосов
/ 01 октября 2010

Механизм заманчивости заключается в использовании хранилища ThreadLocal, но на некоторых серверах приложений это опасно - сервер приложений может использовать пулы потоков, и один и тот же запрос может обрабатываться разными потоками в разных точках.

Некоторые серверы приложений (я знаю, что WebSphere делает) предлагают специальный API для этой цели. В WAS это UserWorkArea. См. здесь для справки, немного вниз по статье.

Мне неизвестно о портативном решении этой проблемы.

2 голосов
/ 01 октября 2010

Не передавайте HttpSession вам «стандартные» классы Java. Для лучших решений проверьте контейнеры внедрения зависимостей, такие как Spring или Guice, и прочитайте о области действия сеанса.

Обычно это решается комбинацией локального шаблона потока и фильтра сервлета, но обычно плохо иметь «стандартные» классы Java для прямого доступа к сеансу, запросу и т. Д.

1 голос
/ 01 октября 2010

Одним из решений может быть использование ThreadLocal .Будьте осторожны, чтобы очистить его в конце вашего запроса.

0 голосов
/ 01 октября 2010

То, что вы хотите, в действительности является глобальной переменной, и «загрязнение» списков параметров в других ваших классах намного чище.Это становится легче читать и тестировать.

Если вы хотите избежать кода, зависящего от servlet.jar, используйте шаблон адаптера: создайте интерфейс необходимых операций, позвольте вашим методам принять аргумент этого интерфейса и создайте простую реализацию оболочкиэто то, что просто делегирует HttpSession.

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