如何在ApacheFelix下实现OSGibundle的卸载方法



我在一个使用ApacheFelix OSGi实现的应用程序中安装了许多OSGi捆绑包。其中一些捆绑包在卸载时需要运行额外的步骤。例如,删除临时文件或删除数据库中的相关行或其他日志记录。业务规则希望这种情况在卸载插件时发生,而不是在停止插件时发生。

我知道BundleActivator上的启动和停止方法,但我不知道在哪里可以实现卸载方法。

我还尝试过实现BundleListener。这似乎是在启动时调用的,但不是在卸载时调用的。我正在BundleActivator的启动方法中注册BundleListener。我应该在其他地方注册吗?

当使用ApacheFelix卸载OSGi捆绑包时,实现代码的正确方法是什么?

捆绑包无法观察到它自己的UNINSTALLED事件,因为它的BundleListener在捆绑包停止期间被删除。您将需要另一个未停止的bundle来观察UNINSTALLED事件并执行任何所需的处理。

正如其他人所说,我认为您不能在bundle本身中做到这一点。为此,您可能需要使用另一个捆绑包。

在另一个捆绑包中,您可以注册一个声明性服务(例如,使用Apache Felix SCR注释),并使用BundleTracker/BundleTrackerCustomizer来侦听添加和删除的捆绑包。

最新更新