osgi - 使用同一文件安装两个 bundle

标签 osgi bundle apache-felix declarative

我正在使用 OSGI 声明性服务。

在我的 java 应用程序中,我启动 Apache Felix,并安装并启动一些包。

使用相同的文件路径安装了两个 bundle 。 bundle 启动后,它应该显示一条“Hello”消息。

当我安装并启动第一个 bundle 时:

Bundle bundle1 = context.installBundle("file:C://Users//bundles//myBundle.jar");
bundle1.start();

这会在控制台中显示“Hello”。

但是,当我安装第二个 bundle 时(与第一个 bundle 具有相同的文件路径)

Bundle bundle2= context.installBundle("file:C://Users//bundles//myBundle.jar");
bundle2.start();

我没有看到任何输出。这意味着第二个 bundle 的安装和/或启动被忽略。

我需要一种方法来安装和启动具有相同文件路径的两个不同的 bundle ,当我停止其中一个 bundle 时,另一个应该保持事件状态。我怎样才能实现这一目标?谢谢。

我正在考虑的用例:假设我有两个用户,并且都想使用相同的功能( bundle )。如果其中一个人决定停止 bundle 功能,而另一个人想保留它怎么办?

有没有更好的方法来实现这一目标?谢谢。

最佳答案

两次安装之间文件内容是否发生变化?如果没有,那么你不能这样做。本质上,您尝试实例化 bundle 两次,而 OSGi 只允许每个 bundle 安装一次。

实际上,您可以同时拥有一个 bundle 的多个版本,但是 Bundle-SymbolicNameBundle-Version 对在框架内必须是唯一的。

将用户功能映射到已安装的 bundle 确实不是一个好主意。为什么用户应该关心应用程序中安装的模块?相反,您希望使 bundle 中的功能支持多个用户。

关于osgi - 使用同一文件安装两个 bundle ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21379379/

相关文章:

java - Osgi同步服务

eclipse - 在 Eclipse RCP 包工作目录中包含一个文件

swift - 无法在 bundle 中加载 NIB - swift 3(仅限物理设备)

linux - 推荐在 Felix 上开发的操作系统

java - ServiceMix 找不到 OSGI 数据源

java.lang.ClassCastException : ihtika2. i_testbundle.TestClasss 无法转换为 ihtika2.i_testbundle.service.TestClasssInter

log4j - OSGi 的类加载问题

java - JAXB + OSGi 与 Java 11

java - OSGI API 包中的具体类

cocoapods - Cocoapod bundle 在我的应用程序中不可用