【问题标题】:AspectJ LoadTimeWeaving on OSGIOSGI 上的 AspectJ LoadTimeWeaving
【发布时间】:2018-09-23 10:02:57
【问题描述】:

我正在尝试在 Equinox jars(org.aspectj.runtime、org.aspectj.weaver、org.eclipse.equinox.weaving.aspectj on bundles 文件夹和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]

我想知道应该如何启动 hook jar? 我将不胜感激任何帮助... p.s.有人通过将包“org.eclipse.osgi”和片段“org.eclipse.equinox.weaving.hook”作为“带有链接内容的二进制项目”导入他的工作区来解决他的问题,但我不确定如何去做: https://www.eclipse.org/forums/index.php?t=msg&th=440862

感谢您的回复

【问题讨论】:

    标签: osgi aspectj equinox load-time-weaving osgi-fragment


    【解决方案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

    如果可能对其他人有帮助,我还会在此处添加我们的电子邮件内容:

    " 你好!

    不久前我研究过这个主题,但它肯定对我们很有效,并且仍然是基于插件的铁路交通控制应用程序的一部分。

    针对您的问题:

    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.: 你是怎么偶然发现我的博客的?我很高兴有人真正阅读并发现它很有帮助,即使它不能完全解决他们的所有问题。 :-) "

    【讨论】:

    • 查看我将 AOP 添加到我的 osgi 骨架的 github 提交的差异中的内容。那里的编织钩子是作为框架扩展添加的,而不是像其他包那样以通常的方式“启动”。为此,正如我所说,捆绑包必须靠近主春分点。无论如何,请参阅差异顶部的 osgi_tester.product 的差异。
    • 还要查看配置中的启动级别。您可能需要像我一样对它们进行试验:包含面向方面的内容的 *.aop 包的起始级别为“0”,而“org.eclipse.equinox.weaving.aspectj”的起始级别为“3”如您所见,主要的 OSGi 服务大多介于这两者之间。我试图在我的博客中写下所有内容,但是我之所以想将 op 一个完整且自包含的项目放到 github 上,是因为没有什么比工作示例代码更好的了……
    • 非常感谢您提供有用的博客和邮件 - 这是与您的一次很棒的对话 - 因为我在邮件中结合了我们讨论过的所有内容给您写信,解决了我的问题... 1- 我降级了到 1.5.4,因为我无权升级到 1.8.13 其他层 2- org.aspectj.runtime;visibility:=reexport 解决了我的缓存问题 3-我在 1 级启动 org.eclipse.equinox.weaving.aspectj
    猜你喜欢
    • 2017-07-22
    • 1970-01-01
    • 2016-10-13
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2023-03-10
    • 2011-08-31
    相关资源
    最近更新 更多