powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Логирование в распределенных системах
18 сообщений из 18, страница 1 из 1
Логирование в распределенных системах
    #37973515
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Всем доброго вечера.

Прошу помощи по такому вопросу. Есть распределенная система из нескольких серверов приложений, а именно на Glassfish. "Наружу" выставлены несколько веб-сервисов. Требуется складывать лог вызовов к сервисам в централизованное хранилище - в БД. Грубо говоря это просто скинуть request и response. Вроде бы несложно, но! Как всегда доп. требования )) Требуется детализация по операциям внутри сервиса с иерархией вызовов, т.е. если у EJB вызывается метод, то надо залогировать и его. В итоге в БД складываются записи в виде дерева, отражающего иерархию вызовов. EJB могут быть remote.
Извините, если путанно объясняюсь. Вообще не представляю как это сделать, в голове каша. На J2EE перешел со спринга, много чего недогоняю. Есть общая идея. Аннотациями помечать логгируемые методы, на интерцепторах обрабатывать лог вызываемых методов, но как это реализовать - непонятно. Прошу подтолкнуть к правильному решению. Собссно пока непонятно даже как вообще реализовать сами интерцепторы... (((

Нашел тему: Вопрос по логированию , но ответа на свой вопрос там не увидел.
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #37973799
Kostya Ilyinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA,

В итоге в БД складываются записи в виде дерева, отражающего иерархию вызовов.

В БД просто кладете логи (аппендером Log4J или как-нибудь еще), добавляете ко всем вызовам логирования новый параметр, скажем так correlation id, operation_id - что-то в этом роде, но основе этого ключа вы должны будете выстроить "иерархию" запросов - при помощи timestamp и этого ключа. Как вариант, имя пользователя системы или номер аккаунта кастомера, или MSISDN или какой-нибудь еще ключ из вашей предметной области, позволяющий УНИКАЛЬНО определить от "чьего" запроса веб-сервиса был совершен вызов EJB и т.д. Можно пробовать помещать какой-нибудь дополнительный сгенерированный ключ в ThreadLocal и потом его доставать. Этот вариант если вызовов от одного кастомера слишком много чтобы выстроить последовательность действий при анализе.

Щас местные гуру подтянутся, поправят/дополнят/отвергнут такой подход.
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #37973825
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Kostya Ilyinov,

Непонятно как передавать текущему "уровню" id родителя, учитывая, что есть методы к remote EJB. Хотя можно иерархию накапливать в отдельном EJB доступного всем прочим.
Kostya IlyinovВ БД просто кладете логи (аппендером Log4J или как-нибудь еще), Такая задача тоже есть, но для конечного пользователя надо что-то более читабельное, потому надо самому классификацию записей делать, сообщения прикреплять об результатах операции, классифицировать такие записи. Но в принципе можно такую классификацию сделать на уровнях логгирования.
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #37973827
Kostya Ilyinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA,

С удаленными EJB думаю только какой-нибудь суррогатный ключ. Подумайте, что в вашей предметной области может таким ключом являться. У нас был мобильный номер.
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #37973828
Kostya Ilyinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kostya Ilyinov,

Как вариант, можно добавить параметр к вызову EJB - но это самый крайний случай.
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #37973837
Kostya Ilyinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGAKostya Ilyinov,

Непонятно как передавать текущему "уровню" id родителя, учитывая, что есть методы к remote EJB. Хотя можно иерархию накапливать в отдельном EJB доступного всем прочим.


Можно, но имхо не самый изящный подход. Я бы поискал в параметрах что-либо, что можно использовать для определения родителя.
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #37975396
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Решил задачу с помощью @RequestScoped EJB, доступного всем сервисам. Вроде работает )))
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #37976895
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Поспешил, не работает
Подскажите плз можно ли сделать context dependency injection в скоупе request в распределенной системе?
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #37977386
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Kostya IlyinovWGA,

С удаленными EJB думаю только какой-нибудь суррогатный ключ. Подумайте, что в вашей предметной области может таким ключом являться. У нас был мобильный номер.Ключа нет. По-крайней мере универсального. Очень разнообразные бизнес-операции.Kostya IlyinovKostya Ilyinov,

Как вариант, можно добавить параметр к вызову EJB - но это самый крайний случай.совсем крайний...
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #37977500
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно покрутить какой-нибудь JMSQueueAppender чтобы было технологично.

Попробовать при создании логгера использовать Context или метод
log(Object message) если таковой есть (я не помню) и толкать туда
информацию о контексте дерева. Ну если не хватит то как-то расширить
интерфейс и дописать своё.
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #37977513
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
mayton,

Если правильно понял, то стандартного способа передачи контекста в вызываемые удаленные EJB нет. А жаль...
Для успокоения совести почитаю еще JSR-299, но склоняюсь к тому, что ограничить логгирование одним уровнем, т.е. в веб-сервисах только. Если у кого есть другие идеи то велкам.

Спасибо всем кто участвовал.
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #37977655
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понимаю. EJB больше касается интерфейсов и спецификаций.
А логгирование - как напишете так и будет.
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #37977771
Kostya Ilyinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

TCу нужно видеть из EJB кто его позвал. В том числе и из удаленного EJB. Крайний вариант - добавить параметр caller, но это лажа. У нас использовался ThreadLocal, но он на то и ThreadLocal - для удаленных объектов не подходит.

P.S. Только сейчас начинаю замечать этакий "каломбур Ржевский (c)" - удаленный в смысле Remote, а не в смысле "отстуствующий"
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #37977773
Kostya Ilyinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Публика склоняется что для дистанционных вызовов серебрянной пули нет - либо дополнительные параметры, либо вот такой глобальный HashMap - http://www.hazelcast.com/
Источник:
http://stackoverflow.com/questions/10328464/threadlocal-usage-in-enterprise-application
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #38013947
marx_freedom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я, конечно, очень поздно отвечаю, но дайте попробовать...

а зачем/почему у вас там remote ejb?
наружу выставлены web-services - разверните их на каждой ноде, поставьте перед ними балансировщик, пусть ws получает информацию о вызвавшем и складывает ее в threadlocal (он же ее и очистит после завершения работы), далее пусть ws дергает ejb через local интерфейс (этот ejb дергает другие тоже через local интерфейсы - т.е. в результате запрос обработается полностью на той ноде, на которую его отправил балансировщик). это если я правильно понял задачу :)
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #38013988
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
marx_freedomя, конечно, очень поздно отвечаю, но дайте попробовать...

а зачем/почему у вас там remote ejb?
наружу выставлены web-services - разверните их на каждой ноде, поставьте перед ними балансировщик, пусть ws получает информацию о вызвавшем и складывает ее в threadlocal (он же ее и очистит после завершения работы), далее пусть ws дергает ejb через local интерфейс (этот ejb дергает другие тоже через local интерфейсы - т.е. в результате запрос обработается полностью на той ноде, на которую его отправил балансировщик). это если я правильно понял задачу :)Не поздно, проблема все равно никуда не делась ) Проблема в передаче контекста между разными JVM. В данном конкретном случае что-то наподобие @RequestScoped.
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #38015083
marx_freedom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGAНе поздно, проблема все равно никуда не делась ) Проблема в передаче контекста между разными JVM. В данном конкретном случае что-то наподобие @RequestScoped.
Так вот я предлагаю не передавать данные между разными jvm, а обработать все в одной. Т.е. веб-сервис запустить в том же контейнере, что и ejb. В нашем случае так можно, в вашем - не знаю. Типа первое правило распределенных объектов - не распределяйте объекты :)
...
Рейтинг: 0 / 0
Логирование в распределенных системах
    #38015100
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Логирование в распределенных системах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]