Идентификатор сеанса из темы / стека - PullRequest
0 голосов
/ 28 июля 2010

Не такая большая проблема, я просто думаю о вещах.

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

Надеюсь, это имеет смысл ....: o)

Ответы [ 2 ]

5 голосов
/ 28 июля 2010

Вообще говоря, было бы лучше, чтобы исключение всплыло до уровня, на котором оно может быть обработано - т. Е. Вашего сервлета.И это то, что я бы порекомендовал.

Вы всегда можете сделать Filter, который перехватывает каждый запрос и где-то помещает текущий идентификатор сессии в public static ThreadLocal<String> sessionId;.Тогда это будет доступно откуда угодно из того же потока.

Другое дело, будет ли sessionId полезным.Возможно, вы можете использовать свой идентификатор пользователя, IP-адрес пользователя или другую подобную информацию.

2 голосов
/ 28 июля 2010

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

Кстати, пропускать идентификатор сеанса с целью ведения журнала - плохая идея.,Лучшим подходом является передача объекта контекста выполнения, который уникально идентифицирует запрос (и, следовательно, также используется для идентификации пользователя, стоящего за ним).

Когда вы используете шаблон объекта контекста, вы также должны знать оего подводных камней .

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