osgi - api 和实现的单独 OSGI 捆绑是常见做法吗?

标签 osgi

我有一个带有依赖项的类,我想在不重新启动依赖项的情况下热部署它。该类有一个接口(interface),但只有一个具体实现。

最初,我创建了一个导出接口(interface)的包,并使用未导出的激活器和实现类注册了实现。但是,如果我更新 bundle ,则在调用 PackageAdmin#refreshPackages 时,使用注册服务的 bundle 会在更新后重新启动(使用 fileinstall 时这是自动的)。

我通过创建一个单独的 api 包解决了这个问题。

这是实现这一目标的最佳方法吗?

您是否拥有一个导出其 api 并将实现包含在同一包中的包。据我所知,任何给定的包要么导出其所有类,要么不导出类。我错过了什么?

最佳答案

将 API 包与其在 OSGi 中的实现分开绝对是最佳实践。如果您这样做,那么任何使用 API 的包只需要从 API 包中导入类,这可以让您在运行时更改实现,而无需重新启动依赖包。

理想情况下,您的实现包将实现接口(interface)并将实现导出为 API 提供的接口(interface)上的服务。这允许客户端 bundle 在不引用实现 bundle 的情况下使用该服务。

关于osgi - api 和实现的单独 OSGI 捆绑是常见做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6432800/

相关文章:

java - 从路线外停止 Camel 路线

osgi blueprint如何读取bundle中的资源文件

java - 我可以使用版本限定符来要求 OSGi 中的特定包版本吗?

maven - Felix 1.4.0 OSGi 中的 Axis2

spring - Eclipse RCP、Spring、Hibernate 类加载问题

java - 如何在使用 Shiro 时在 OSGI E4 环境中加载类?

java - Eclipse 扩展点与手动编程访问

java - 使用服务组件运行时

java - 如何实例化多个 OSGi 服务?

java - OSGI中openorb和jdk冲突