AspectJ LoadTimeWeaving на OSGI

Я пытаюсь использовать аспект J Load Time Weaving (без Spring) в OSGI с помощью банок равноденствия (org.aspectj.runtime, org.aspectj.weaver, org.eclipse.equinox.weaving.aspectj в папке пакетов и org.eclipse .equinox.weaving.hook находится в той же папке, что и org.eclipse.osgi (физически) согласно: https://wiki.eclipse.org/Equinox_Weaving_QuickStart

Вот порядок загрузки пакетов:

[org.eclipse.equinox.weaving.hook::1 -> INSTALLED]
[org.aspectj.runtime::11 -> INSTALLED]
[org.aspectj.weaver::12 -> INSTALLED]
[org.eclipse.equinox.weaving.aspectj::13 -> INSTALLED]
[com.common-calculations_2.11::19 -> INSTALLED] //here I used aspects
[com.instrumentation_2.11::48 -> INSTALLED] //here I defined the aspects 
Done installing bundles
Starting bundles...
[org.eclipse.equinox.weaving.aspectj::13 -> ACTIVE]
[org.aspectj.runtime::11 -> ACTIVE]
[org.eclipse.osgi::0 -> ACTIVE]
 FRAGMENT Bundle - skip starting: org.eclipse.equinox.weaving.hook
 FRAGMENT Bundle - skip starting: org.aspectj.runtime
[org.aspectj.weaver::12 -> ACTIVE]
 FRAGMENT Bundle - skip starting: org.eclipse.equinox.weaving.aspectj
 Bundle started: [com.common-calculations_2.11::19 -> ACTIVE]
 Bundle started: [com.instrumentation_2.11::48 -> ACTIVE]

Я хочу знать, как мне запустить банку с крючком? Буду признателен за любую помощь... p.s. кто-то решил свою проблему, импортировав пакет «org.eclipse.osgi» и фрагмент «org.eclipse.equinox.weaving.hook» как «Двоичный проект со связанным содержимым» в свою рабочую область, но я не совсем уверен, как сделайте это: https://www.eclipse.org/forums/index.php?t=msg&th=440862

Спасибо за ваши ответы


person Shico Ren    schedule 23.09.2018    source источник


Ответы (1)


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

http://ballmerpeak.web.elte.hu/devblog/setting-up-aspect-Oriented-programming-with-equinox-osgi-and-ajdt.html

Автономный пример кода представлен на моем github:

https://github.com/prenex/equinox_osgi_skeleton

Я также добавляю содержимое нашего электронного письма сюда, если оно может помочь другим:

" Hi!

Это было некоторое время назад, когда я работал над этой темой, но, безусловно, она хорошо работала для нас и до сих пор является частью приложения для управления железнодорожным движением на основе плагинов.

Для вашей проблемы:

1.) Поместили ли вы пакет equinox.weaving.hook рядом с основным пакетом org.eclipse.osgi? В последний раз, когда я работал над этим требованием, были некоторые не совсем понятные вещи, поэтому я написал об этом в блоге. 2.) Пробовали ли вы мой пример кода по следующей ссылке?

https://github.com/prenex/equinox_osgi_skeleton

Я бы сначала попытался запустить этот мой пример проекта, который уже содержит AspectJ, а затем сравнил бы ваше решение построчно в соответствующих местах, пока оно не начнет работать.

Посмотрите на следующую фиксацию, чтобы увидеть, что я изменил в общем скелетном проекте equinox+osgi, чтобы добавить простую поддержку AspectJ: ">https://github.com/prenex/equinox_osgi_skeleton/commit/882d7765f31a3fc8ee136e88b689fce116a73d1c

С уважением, Ричард Тьер

PS.: Как вы наткнулись на мой блог? Я рад, что кто-то на самом деле прочитал ее и нашел ее полезной, даже если она не решает полностью все их проблемы. :-)"

person prenex    schedule 25.09.2018
comment
Посмотрите, что находится в разнице коммита github, где я добавляю AOP в свой скелет osgi. Крючок для плетения там добавлен как расширение фреймворка, а не запускается обычным способом, как другие комплекты. Чтобы это сработало, пучок должен был быть рядом с главным равноденствием, как я сказал. Посмотрите разницу osgi_tester.product, которая в любом случае для меня находится на вершине различий. - person prenex; 25.09.2018
comment
Также посмотрите на начальные уровни в конфигурации. Возможно, вам придется поэкспериментировать с ними, как это сделал я: мой пакет *.aop, который содержит мой аспектно-ориентированный материал, имеет начальный уровень 0, а org.eclipse.equinox.weaving.aspectj получил начальный уровень 3 с основными службами OSGi в большинстве случаев. между этими двумя, как вы можете видеть. Я пытался записывать все в свой блог, но причина, по которой я хотел выложить законченный и самодостаточный проект на github, заключается в том, что нет ничего лучше, чем работающий пример кода... - person prenex; 25.09.2018
comment
Большое спасибо за ваш полезный блог и письма - это был потрясающий разговор с вами - когда я написал вам по почте, комбинацию всего, о чем мы обсуждали, решил мои проблемы... 1- Я понизил версию до 1.5.4, так как я не у меня нет доступа к обновлению до 1.8.13, другой уровень 2- ‹Require-Bundle›org.aspectj.runtime;visibility:=reexport‹/Require-Bundle› решает мою проблему с плохим кэшированием 3- и я запускаю org.eclipse. Equinox.weaving.aspectj на уровне 1 - person Shico Ren; 27.09.2018