Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Практическая польза АОП / 14 сообщений из 14, страница 1 из 1
02.11.2005, 11:00
    #33356880
220 V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Практическая польза АОП
Почитал немного на тему аспектно-ориентированного программирования, про AspectJ. Красиво, свежо. Но не понял главного: для чего весь этот сюрриализьм может сгодится в жизни. Ну логгеры говорят хорошо реализовывать на нем, ну допустим. Может кто юзал AspectJ в своих проектах, и сэкономил на этом уйму времени и кода. Поделитесь вашими достижениями, если не затруднит.
...
Рейтинг: 0 / 0
02.11.2005, 11:51
    #33357053
jdev333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Практическая польза АОП
был у нас проектик один на прошлой работе. Чего вспомню - напишу.

Было 2 сессион бина с кучей (~5-8 методов в каждом).

Вдруг понадобилось добавить логирование в базу ход всех операций:
- начало операци
- успешное завершение операции или неуспешное

мона как поступить? В каждый из (10-15) методов вставить логирование начала операции, успешного завершения операции ( в каждом(!) случае return) и в каждом(!) из мест возможных исключений и/или обработки исключений логирование "провала".

Методы бинов уже и так были несколько перегружены подобной "сквозной функциональностью" - Lock-манагер, например, и т.д.


мона попытаться сделать Facade для каждого бина. Пытались - ужасно:
Бизнес метод можеть кидать от 1 до 5 исключений, которые нужно пробрасывать обратно (фасад-прокси не должен менять интерфейс) соответствующим оператором - длинный, некрасивый код.

Решили делать с AspectJ. В принципе неплохо получилось, забавно. Но были и проблемы:
- из-за недостатка опыта в AspectJ и/или из-за естественной неоднородности разных бизнес-методов код Aspect-а был, конечно, прост, но не особо короток.
(И на каждый бин(их 2) свой аспект написали)
- Ejb CMP container комиттит транзакцию в самом конце => невозможно залогировать такие ошибки для некоторых методов, которые сами не комитят какой-то результат. В нашем конкретном случае было признано некритичным.
- в JBuilder X не было плагина для AspectJ (offtop: есть в Эклипсе)
...
Рейтинг: 0 / 0
02.11.2005, 12:17
    #33357168
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Практическая польза АОП
Кроме логеров есть, например, еще такие вещи как
декларативное управление транзакциями
...
Рейтинг: 0 / 0
02.11.2005, 12:54
    #33357281
jdev333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Практическая польза АОП
funikovyuri

в EJB :)

--
а Вы, кстати, пробовали корректно реализовать такое декл-е упр-е транзакциями?

помню у мну остались смешанные воспоминания. Были проблемы с пробрасываемыми исключениями.
...
Рейтинг: 0 / 0
02.11.2005, 13:32
    #33357415
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Практическая польза АОП
jdev333

Использовал готовую реализацию из Spring'а (Spring AOP)... Остался доволен
...
Рейтинг: 0 / 0
02.11.2005, 13:36
    #33357428
jdev333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Практическая польза АОП
funikovyuri

кстати, не просветите? Вроде Spring AOP на reflection работает, в отличие от AspectJ? (который меняет байт код)
...
Рейтинг: 0 / 0
02.11.2005, 13:48
    #33357464
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Практическая польза АОП
jdev333
http://static.springframework.org/spring/docs/1.2.x/reference/aop.html6.1.3. AOP Proxies in Spring

Spring defaults to using J2SE dynamic proxies for AOP proxies. This enables any interface or set of interfaces to be proxied.

Spring can also use CGLIB proxies. This is necessary to proxy classes, rather than interfaces. CGLIB is used by default if a business object doesn't implement an interface. As it's good practice to program to interfaces rather than classes, business objects normally will implement one or more business interfaces.

It is possible to force the use of CGLIB: we'll discuss this below, and explain why you'd want to do this.
Beyond Spring 1.0, Spring may offer additional types of AOP proxy, including wholly generated classes. This won't affect the programming model.

Т.е. во время выполнения создается прокси класс (наследник нашего класса или интерфейса) в который добавляется нужная функциональность (вызовы advice'ов).
Подобным образом работает и, например, hibernate.

Также Spring позволяет использовать кроме своей реализации AOP еще и AspectJ
Но я сам AspectJ не использовал, так как пока хватало Spring'а
...
Рейтинг: 0 / 0
02.11.2005, 14:11
    #33357551
jdev333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Практическая польза АОП
ясно, спасиб

во время выполнения => reflection, но reflection используется тока один раз
...
Рейтинг: 0 / 0
02.11.2005, 22:28
    #33358889
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Практическая польза АОП
Еще может пригодицца при постоянной авторизации...
В целях изучения юзал аспекты для управления транзакциями хибернейта... (подсмотрел на хибернейтовском сайте :) )
Примитивный профайлинг... опять же код не курочить :)

Еще есть интродьюкшн... спорная фича, но иногда и такое нужно :)
...
Рейтинг: 0 / 0
03.11.2005, 10:10
    #33359305
jdev333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Практическая польза АОП
есть еще польза в виде инспектирования кода на соблюдение приличий.
Типа нельзя объявлять какие-то поля в Stateless Session по спецификации и т.д.

И не куроча код мы автоматом выявляем все нарушения! :)
Auto Code review - это забавно ;)
...
Рейтинг: 0 / 0
03.11.2005, 10:11
    #33359307
jdev333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Практическая польза АОП
(правда, я как увидел сколько раз нарушены рекомендации по одним тока Session бинам - испугался и отключил эту фичу :))
...
Рейтинг: 0 / 0
03.11.2005, 12:22
    #33359774
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Практическая польза АОП
jdev333есть еще польза в виде инспектирования кода на соблюдение приличий.
Типа нельзя объявлять какие-то поля в Stateless Session по спецификации и т.д.

И не куроча код мы автоматом выявляем все нарушения! :)
Auto Code review - это забавно ;)
Угу, при девелопменте хорошо бьет по рукам, там где обычные (словесные) замечания на девелоперов эффекта не производят. Так сказать, большой брат смотрит на тебя :)
...
Рейтинг: 0 / 0
03.11.2005, 22:30
    #33361272
М.Голованов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Практическая польза АОП
220 VПочитал немного на тему аспектно-ориентированного программирования, про AspectJ. Красиво, свежо. Но не понял главного: для чего весь этот сюрриализьм может сгодится в жизни. Ну логгеры говорят хорошо реализовывать на нем, ну допустим. Может кто юзал AspectJ в своих проектах, и сэкономил на этом уйму времени и кода. Поделитесь вашими достижениями, если не затруднит.

Вы почитайте про его возможности и прикиньте, нужны ли они вам. У меня еще не было ни одного проекта, где бы нельзя было бы обойтись Struts или аналогами. И не уверен, что потребуется вам.

"Не умножайте сущностей сверх необходимости."
...
Рейтинг: 0 / 0
03.11.2005, 22:38
    #33361278
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Практическая польза АОП
М.Голованов
Вы почитайте про его возможности и прикиньте, нужны ли они вам. У меня еще не было ни одного проекта, где бы нельзя было бы обойтись Struts или аналогами. И не уверен, что потребуется вам.
Обойтись без АОП можно ( ИМХО всегда ), но нужно ли обходицца без него если можно им воспользовацца?? :)
М.Голованов"Не умножайте сущностей сверх необходимости."
Истина :) Здравый смысл должен подсказать в каком месте игра стоит свеч...

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


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