Java взять параметры вызывающего метода из call stack

uaha1979

Работаю в нагрузочном тестировании.
Нужно сэмулировать работу Java-клиента. И нагрузить сервачок.
Есть проект, к нему есть исходники. В них создается сессия для доступа к серваку, и переменная в которой она хранится объявлена как static. Всюду в приложении сессия берется как ClassName.getSession. (Те в рамках одного юзера все хорошо)
Моя задача сделать, чтобы много пользователей работали одновременно.
Для этого я переписываю ClassName, чтобы он хранил массив из session (а не одну static и надо переписать ClassName.getSession чтобы возвращал соответствующую сессию.
Проблема: всюду из кода сессия берется как ClassName.getSession и нет возможности отследить какой пользователь берет сессию (или есть?).
Для решения хочу в ClassName.getSession брать call stack искать метод login и выбирать оттуда логин пользователя.
Вот только StackTraceElement такого не поддерживает, возвращает только имя метода =(
Как быть?
UPD: Еще появилась безумная идея: под каждого пользователя сделать свою функцию логина типа login_user1. Но это чересчур костыль.

danilov

По-хорошему, лучше перепроектировать приложение, чтобы при подобных вызовах иметь контекст исполнения.
Если дорого или не хочется и есть гарантия, что на стеке в параметрах действительно был логин и он ближайший по стеку,
то спасёт ThreadLocal (заполнять в login на входе, на выходе возвращать старое значение).

marat7256

Почему нельзя запустить несколько копий приложения не меняя код?

uaha1979

Это будем делать, если ничего не получиться.

yroslavasako

Для этого я переписываю ClassName, чтобы он хранил массив из session (а не одну static и надо переписать ClassName.getSession чтобы возвращал соответствующую сессию.
почему массив, а не map user -> session?

Hastya

Вот только StackTraceElement такого не поддерживает, возвращает только имя метода =(
Естессно, он ведь не хранит параметры методов. Такие извращения можно сделать только через какой-нибудь Java Debug Interface.
Оставить комментарий
Имя или ник:
Комментарий: