Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / AspectJ / 12 сообщений из 12, страница 1 из 1
07.08.2012, 18:30:52
    #37907805
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AspectJ
Добрый вечер, господа.

Заполз ко мне в голову один умный таракан, я подумал, что если в проекте подключить AspectJ для логирования?
Надоели в коде куски типа LOG.debug(...). Правильно я понимаю, что с помощью AspectJ можно необходимое множество методов расширить таким образом, чтобы они логировались на входе и выходе? Тогда часть сквозного функционала по логированию уйдет.
Местами я использую интерсепторы для логирования Stateless бинов. Но не одними Stateless бинами живет наше приложение и существует множество классов, на которые повешать интерсепторы нет возможности. Их приходится логировать вручную на входе и выходе, что, конечно же, доставляет.
На сколько я знаю, AspectJ работает без рефлексии и следовательно не сказывается негативно на производительности. Смущает только один момент - где-то слышал, что AspectJ - как черный ящик: что он и как делает с байт-кодом - одному ему известно. И в продакшн может идти страшно после модификаций байткода AspecjJ.
Теперь собственно вопрос: какие есть подводные камни с AspectJ, может кто-нибудь обжегся чем-нибудь?

Спасибо!
...
Рейтинг: 0 / 0
08.08.2012, 02:20:52
    #37908062
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AspectJ
AOP для логирования не очень подходит. IMO логирование кода это вещь достаточно интелектуальная.

AOP подходит для трасировки. Вызов метода с такими параметрами, на выходе результат такой-то.
...
Рейтинг: 0 / 0
08.08.2012, 05:52:49
    #37908089
Kostya Ilyinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AspectJ
rabiter,

У нас в проекте Spring AOP используется для сбора бизнес-событий - то бишь тоже нужно нырнуть в параметры, убедиться что все нужные параметры имеются в контексте, и сохранить в базу. Версия АОП от спринга - весьма усеченная и не позволяет некоторых трюков, на которые способен полноценный AspectJ - но для большинства задач вполне хватит. Никакой черной магии - все отлично работает в продакшене. Спринговые штучки для управления транзакциями наверняка же используете - тот же подход для оборачивания вашего метода методом эдвайса.
...
Рейтинг: 0 / 0
08.08.2012, 14:59:13
    #37908999
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AspectJ
vas0,

Спасибо за ответ. Да, хотя бы от трассировки от ручной избавиться (так называемый invoke around аспект если не ошибаюсь)
...
Рейтинг: 0 / 0
08.08.2012, 15:01:36
    #37909008
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AspectJ
Kostya Ilyinovrabiter,

У нас в проекте Spring AOP используется для сбора бизнес-событий - то бишь тоже нужно нырнуть в параметры, убедиться что все нужные параметры имеются в контексте, и сохранить в базу. Версия АОП от спринга - весьма усеченная и не позволяет некоторых трюков, на которые способен полноценный AspectJ - но для большинства задач вполне хватит. Никакой черной магии - все отлично работает в продакшене. Спринговые штучки для управления транзакциями наверняка же используете - тот же подход для оборачивания вашего метода методом эдвайса.

Спасибо за ответ. Спринг не использую в проекте. Проект на EJB и CDI. Конечно, некоторые бины обернуты интерсепторами - так сказать проксированы. Все же попробую AspectJ на зубок, если понравится, может получится протолкнуть в проект.
...
Рейтинг: 0 / 0
09.08.2012, 00:49:10
    #37909759
dmitriyche
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AspectJ
rabiter,

AspectJ очень хорошо справляется с логированием.

ButWith great power comes great responsibility.
...
Рейтинг: 0 / 0
09.08.2012, 10:44:25
    #37910103
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AspectJ
dmitriycheAspectJ очень хорошо справляется с логированиемнет )
сказали же уже 12978548
...
Рейтинг: 0 / 0
09.08.2012, 11:26:57
    #37910211
dmitriyche
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AspectJ
grasoff.net, позвольте перефразировать мой пост.

dmitriycheAspectJ очень хорошо справляется с логированием.

В тех ситуациях, которые возникали на моей практике, AspectJ справился отлично. В моём восприятии его кросс-каты - это как селекторы в CSS, вы всегда можете подстроить нужный уровень логирования от более абстрактных вещей (пакеты, классы) до более низких (проперти).
...
Рейтинг: 0 / 0
09.08.2012, 11:38:53
    #37910247
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AspectJ
dmitriychegrasoff.net, позвольте перефразировать мой пост.

dmitriycheAspectJ очень хорошо справляется с логированием.

В тех ситуациях, которые возникали на моей практике, AspectJ справился отлично. В моём восприятии его кросс-каты - это как селекторы в CSS, вы всегда можете подстроить нужный уровень логирования от более абстрактных вещей (пакеты, классы) до более низких (проперти).

Да, но кросс-каты можно не везде воткнуть если я правильно понимаю. Посередине метода, например нельзя. Таким образом логирование через AspectJ сводится к простой трассировке вызова методов. Поправьте меня если я не прав.
...
Рейтинг: 0 / 0
09.08.2012, 14:10:08
    #37910576
dmitriyche
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AspectJ
rabiterДа, но кросс-каты можно не везде воткнуть если я правильно понимаю. Посередине метода, например нельзя. Таким образом логирование через AspectJ сводится к простой трассировке вызова методов. Поправьте меня если я не прав.

AspectJ поддерживает как момент захода в метод, так и вызов метода.
Ведь вы же к чему-то обращаетесь в середине метода. Следайте кросс-кат на обращение, которое происходит внутри другого кросс-ката.

Пример в данное время дать не могу.
...
Рейтинг: 0 / 0
09.08.2012, 20:18:51
    #37911322
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AspectJ
dmitriycheВедь вы же к чему-то обращаетесь в середине метода. Следайте кросс-кат на обращение, которое происходит внутри другого кросс-ката.

Пример в данное время дать не могу.дак я зато дам )

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
@LogWithAspectJ
public void colokato(String param) {
  int a = 1;
  int b = remoteService.getB(); // это не наш сервис (даааа, для него можно сделать wrapper)
  param = convert(param);
  // тут залогируйка

  int c = colokato(a, b, param);
  
  // тут залогируйка
}

private String convert(String s) {
  // тут залогируй-ка
  s = remoteService.process(kkk);
  s = ...;
  s = s.substring(...);
  return s;
}
...
Рейтинг: 0 / 0
10.08.2012, 11:51:47
    #37911980
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AspectJ
dmitriyche, grasoff.net, спасибо за ответ :-)

Вообщем, следующее заключение я сделал - можно попробовать AspectJ для трассировки вызова методов. Надо только еще сделать так, чтобы входные/выходные параметры тоже в трассу попадали.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / AspectJ / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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