我正在使用 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-SymbolicName
和 Bundle-Version
对在框架内必须是唯一的。
将用户功能映射到已安装的 bundle 确实不是一个好主意。为什么用户应该关心应用程序中安装的模块?相反,您希望使 bundle 中的功能支持多个用户。
关于osgi - 使用同一文件安装两个 bundle ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21379379/