【问题标题】:How to listen to all bundle events?如何监听所有捆绑事件?
【发布时间】:2013-03-05 12:45:12
【问题描述】:

我已经编写了一个 Eclipse 插件,它将 BundleListener 注册到 BundleContext,其中它是 started。注册的侦听器将记录所有BundleEvents。我注意到只记录了STARTED 类型的事件。

我已在 Eclipse 的 config.ini 中注册了从级别 2 开始的捆绑包,默认捆绑启动级别为 4。

有什么方法可以让我监听 RESOLVED 类型的事件?我是否为接收该类型的事件而启动捆绑包太晚了?是否使用了多个捆绑上下文?

【问题讨论】:

    标签: java eclipse osgi


    【解决方案1】:

    由于动态性,强制排序通常是一个坏主意,而且在 OSGi 中更糟。你可以得到一些看起来像开始级别排序的东西,但它肯定是非常脆弱的,并且很快就会变得非常复杂。因为通常您需要事件来发现状态,所以我想知道您的用例是什么。在 OSGi 中,查找 Bundle 状态是微不足道的。对于需要状态发现事件的应用程序,BundleTracker 提供了一个非常好的 API 来发现处于一组状态的捆绑包。根据我的经验,BundleTracker 非常适合 99% 的 BundleListener 用例。

    如果您只是记录,所有框架事件都会记录到日志服务,并且日志服务通常会很早就启动。通过日志阅读器服务,您可以访问在您开始之前发生的事件。

    【讨论】:

    • 我知道这是不好的做法。但是我需要分析我们的 Eclipse 的启动,因为这非常慢(主要是由于旧盒子,但这是无法快速更改的东西)。感谢 BundleTracker 和 LogService 的提示。这看起来很有希望。
    • 您可能来不及看到 RESOLVED 事件,因为 Equinox 可能在第一个捆绑包启动之前已经解析了所有捆绑包,并且可以注册一个侦听器以查看捆绑包事件。
    • 我猜你可以通过在安装任何捆绑包之前编写一个启动器并在框架中注册一个侦听器来查看 RESOLVED 事件。但是又一次......为什么??
    猜你喜欢
    • 2018-04-10
    • 2016-12-06
    • 2015-02-03
    • 1970-01-01
    • 2014-04-25
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多