【问题标题】:In which area using OSGI make sense?在哪个领域使用 OSGI 有意义?
【发布时间】:2019-07-13 20:11:15
【问题描述】:

我正在尝试了解 OSGI。它似乎是为创建智能系统而设计的,例如智能家居、物联网等。 OSGI 还有其他用例吗?用于分析平台或 AI 系统的 OSGI 是否有意义? 对不起,我的问题真的很幼稚。

【问题讨论】:

  • OSGI 不限于任何应用领域。您可以在任何需要“插件系统”或“模块系统”之类的地方使用它。

标签: java osgi artificial-intelligence platform


【解决方案1】:

对我来说,OSGi 最重要的特性是能够在运行时插入/拔出代码模块而无需停止 JVM,因此其他模块(除非依赖于插入/拔出的模块)继续运行。

例如,Liferay Portal (7.0+) 是基于 OSGi 构建的,因为它需要在运行时添加/删除功能和应用程序,而不会中断门户本身。 相反,如果您需要向 Spring 应用程序添加库(甚至是 SPI),您至少必须停止它,在 pom 中添加依赖项,再次编译并运行。

使用 OSGi 还有其他优势(模块化和封装是关键点),但在我看来这是主要优势,我不知道有任何其他 Java 技术可以做到这一点。

无论如何,最好知道 OSGi 不是小菜一碟。这些优点的缺点在于陡峭的学习曲线和大量的试错。 因此,在我看来,应该仔细评估 OSGi 的使用,考虑到所有因素。

【讨论】:

  • 感谢您的回复。您更愿意同时使用 OSGI SpringBoot 和 maven 吗?
  • 在我看来,SpringBoot 是 OSGi 的替代品,因为 SpringBoot 应用程序通过其“main”方法运行(因此,启动一个新的 JVM 进程)。但是可以基于 Spring 构建 OSGi 包(OSGi 中的模块称为“包”)。在这种情况下,最简单的(即使不是“纯”OSGi)解决方案是将 Spring 库作为依赖项添加到 pom 中并构建一个 jar(一个包是具有正确 MANIFEST.MF 的 jar)。必须在 Activator 中调用 Spring 上下文创建(OSGi 运行时,例如 Apache Karaf,在加载、解析和启动新包时调用的方法)。
  • 官方网站是这样的:osgi.org/developer/where-to-start 他们推荐 enRoute 教程,但如果你已经选择了运行时(Equinox、Felix、Karaf...),我会从它的页面开始,因为一些运行时扩展/集成了 OSGi 规范(例如:Eclipse Equinox)。这是一个很好的教程(基于 Equinox),我推荐:vogella.com/tutorials/OSGi/article.html 在任何情况下,这是在 OSGi 中编程的开发人员工具:bnd.bndtools.org,它也是 Eclipse 的扩展。
猜你喜欢
  • 2011-07-14
  • 2021-08-31
  • 2010-12-05
  • 2018-01-25
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多