OSGi 应用程序修补策略

2024-04-15

修补 OSGi 容器的适当机制是什么?

      1) Should the bundles (binaries/jars) have the same name as the old ones then:
            a.  Replace the bundle with the with the new bundle (manifest has been  
              modified to reflect the new version) in the plug-ins folder and,  
            b.  Invoke update <bundle id> <bundle name>.
      2) Or Should the bundles have version information encoded in the file name   
            a.  Copy the new bundle to the plug-ins folder
            b.  Invoke update <bundle id> file:plugins/<new Bundle name>
      3) Or other alternatives, possibly an OBR (not sure of the pros and cons) also 
         we may be constrained by the amount of work involved in retrofitting an OBR.  

我注意到的一件事是,在某些情况下,会在特定包的“数据根”下创建一个包文件(看起来像重命名的 jar)。这种情况是在调用更新时的所有情况下发生还是仅在特定情况下发生。

关于上述内容有什么建议、优点、缺点等等吗?或者有更好的选择吗?基本上我的想法是,用修补后的二进制文件替换原始二进制文件会很好,从 OSGi 上下文来看这是一个好主意吗?

我们正在使用 Equinox OSGi 容器。

Cheers,


我本人建议您这样做:

1. 将您的 API(Java 接口)和实现拆分为单独的包。

这样,如果只有实现发生变化,API 就会保持“活动”状态,从而防止 OSGI 服务被关闭。服务由接口引用。当然,您的服务使用者应该能够处理(暂时)不存在的服务。

2. 有一个清晰的bundle命名方案。

我会在捆绑包 jar 文件名中使用版本。您必须区分文件系统中的 jar,并且使用文件名中的版本有很大帮助。另外,如果你不使用版本,我会担心在运行时覆盖罐子。理论上它应该有效,但你永远不知道。如果您有版本,则不会覆盖旧罐子。

3. 使用清单中的版本。

此外,您应该在清单中使用版本属性。这对于您来说显然不如您的 OSGI 容器来跟踪您的包。


成功安装所有新捆绑包后,我建议您删除旧捆绑包。如果您在文件名中使用了版本,这应该很容易做到。如果您保留旧罐子,您可能会遇到启动时间变慢的情况。这是因为虽然您的容器不使用捆绑包,但他必须加载并检查它们。而且它们也存在于您的类路径中,可能会增加冲突的风险。

我希望这对你有一点帮助。这是一个很好的问题!也许一些更有经验的人也会在那里发表建议:)我想听听其他人是怎么做的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OSGi 应用程序修补策略 的相关文章

随机推荐

  • 使用node.js和backbone.js进行模板渲染

    有没有人找到一个好的解决方案来开发可在服务器和客户端上使用的backbone js模板 这对于backbone js历史堆栈来说是非常理想的 因为用户可以在浏览器位置栏中共享和链接到真实的url 并且node js服务器可以在第一个页面视图
  • Android:旋转动画完成动画后恢复到真实状态?

    我将在 我的应用程序 中旋转图像 旋转一切正常 但是 当我旋转动画完成时 图像将返回到其先前的位置 我想要的是将图像保持在旋转状态 而不是让它回到真实状态 那么怎样才能让它成为可能呢 要旋转图像 我使用以下代码
  • 在应用程序中嵌入 C++ 编译器

    着色器不是很酷吗 您可以只输入一个纯字符串 只要它是有效的源 它就会编译 链接和执行 我想知道是否有一种方法可以将 GCC 嵌入到用户应用程序中 以便它 自给自足 例如具有编译与其自身兼容的本机二进制文件的内部功能 到目前为止 我一直在从应
  • 构建不使用 CRT 函数的 Visual C++ 应用程序仍然引用一些

    这是至少两个密切相关但又截然不同的一系列问题的一部分 我希望通过分别询问他们来做正确的事情 我正在尝试让我的 Visual C 2008 应用程序在没有 C 运行时库的情况下运行 它是一个 Win32 GUI 应用程序 没有 MFC 或其他
  • 为什么使用关键字或符号作为函数从地图中查找值有效?

    引用自Clojure 的乐趣 第 4 3 1 节 由于关键字是自我评估的并提供快速的相等性检查 因此它们几乎总是在映射键的上下文中使用 使用关键字作为映射键的一个同样重要的原因是它们可以用作函数 以映射作为参数来执行值查找 def popu
  • 理解 JS Promise

    我想更深入地了解 Promise 内部是如何工作的 因此我有一些示例代码 var p1 new Promise function resolve reject window setTimeout function resolve res c
  • 核心显卡圆形图像模糊

    我正在使用核心图形绘制圆形图像 并对其进行修改后的实现所以答案 https stackoverflow com a 18664917 1369331 这是我的来源 UIImage circularImageWithRadius CGFloa
  • Spring security 有 SimpleGrantedAuthority 但 hasRole 不起作用

    我有以下代码 private static Collection
  • 为什么 jspService() 不能被重写?

    为什么不能jspService 方法被重写 其中jspInit and jspDestroy 可以被覆盖吗 This 论坛帖子 http www geekinterview com question details 23904解释了为什么不
  • 如何使用具有 BASIC 身份验证的 Service Worker(NTLM、协商)

    我一直在尝试在 IIS 托管网站中使用服务工作线程来缓存该网站的一些静态内容 该站点是使用 Windows 身份验证的内部应用程序 我已经能够注册并运行服务工作线程 没有太多麻烦 但是一旦我打开缓存并开始向缓存添加文件 承诺就会因授权失败而
  • rspec - 为什么仅在 ubuntu 上,当它们相同时,使用 assert_equal 进行此属性比较会失败?

    两个测试都失败了 但仅在 Ubuntu 12 上失败 但在我的 新 Mac 上却失败了 失败的两个是 Active Record 对象属性比较 但我尽了最大努力来比较它们 例如在命令行创建哈希并粘贴属性 比较表明它们是相同的 这是一个真正的
  • Airflow initdb slot_pool 不存在

    我面临一个问题airflowpostgres 后端初始化 乌班图 18 04 1 气流 v1 10 6 Postgres 10 10 Python 3 6 当我跑步时 airflow initdb I get 2019 11 22 10 1
  • 在本例中如何避免 VBA 中的 select/active 语句?

    需要导出一个PDF文件中的所有工作表 所以我找到了这段代码 它有效 导出一个PDF 每张工作表一个页面 但我不想使用 select active 语句 我更喜欢使用存储对象的变量 问题 如何避免此代码中的 select ActiveShee
  • WPF MVVM 可观察集合不更新 GUI

    我正在设计一个 MVVM WPF 应用程序 并且有一个 ViewModel 它有一个名为 SelectedCustomer 的属性 类型为 Customer 该对象有一个名为 SummaryDetails 的 ObservableColle
  • 如何在 GWT 的 Jetty 中启用 HTTPS?

    如何在 GWT 附带的 Jetty 中启用 HTTPS gwt dev jar 中 隐藏 了一个 README SSL txt 你可以找到最新版本在 Github 上 https github com gwtproject gwt blob
  • (Fortify) 类别:Android 不良做法:缺少 Google Play 服务更新的安全提供程序(1 期)

    我们正在使用 Fortify 扫描我的 Android 源代码 但我无法摆脱这个问题 类别 Android 不良做法 缺少 Google Play 服务更新的安全提供程序 1 期 Fortify指向这行代码 工具 替换 android al
  • Numpy 沿特定维度选择不替换

    在不进行替换的情况下 我根据指定的分布从样本中 n 次不同地选择 k 个元素 迭代解决方案很简单 for in range n np random choice a size k replace False p p 我无法设置size k
  • Java:如何通过忽略“\n”来逐行读取文件

    我正在尝试读取每行制表符分隔的文本文件行 行通过使用回车符 r n 进行分隔 并且在制表符分隔的文本字段中允许使用换行符 n 由于我想每行读取文件行 因此我希望我的程序忽略独立的 n 很遗憾 BufferedReader使用这两种可能性来分
  • std::this_thread::yield 与 Linux 上的 sched_yield 有什么不同吗?

    我只是想知道如何std this thread yield是在linux上实现的 它与sched yield 我见过一些自旋锁的实现 这意味着std this thread yield是更轻量级的东西sched yield就线程放弃进程多长
  • OSGi 应用程序修补策略

    修补 OSGi 容器的适当机制是什么 1 Should the bundles binaries jars have the same name as the old ones then a Replace the bundle with