项目的 OSGi 结构

OSGi structure for a project

我想开发一个系统来管理文本文件中的读数。主要结构基于4个bundle:

我的问题是:每个 bundle 应该如何组织?我不是 100% 熟悉 OSGi 的工作方式,这是我正在努力的事情。我目前的结构如下:

是否正确?提前致谢。

您将接口分成不同的包来实现是正确的。通常,您希望每个包都导出包含接口的包,而不是实现包。这将有助于最小化束之间的耦合。

看起来您的所有服务都在一个项目中,这将导致它们都在同一个 OSGi 包中。您可能应该使用自己的清单文件将每个文件分离到自己的项目中。这样就可以独立开发和部署服务,并通过服务接口进行通信。

一些想法。首先将您的代码组织到包中,然后再将其打包。假设您是基于包而不是包来表达依赖关系,那么以后拆分包就相对容易了。

其次,围绕您的预期用途和再利用进行捆绑。这是同一个单元的所有部分吗?如果是这样,我将拥有一个 API 捆绑包和一个或多个实施捆绑包。如果您希望人们稍后混合搭配(例如,将数据文件接口与时间接口分开使用),那么这些(可能)属于单独的包。

我看到几个不同的东西叫做 'Activator'。激活器管理包的生命周期(启动、关闭等)。我通常为每个包最多创建一个激活器,并将其放在“.internal”包中以阐明它不应转义。

最后,请记住库代码和应用程​​序代码之间的区别。如果你想在不同的应用程序中重用一个包(有点意思),它可能不应该启动它自己的服务(通过激活器或声明式服务)。在应用程序(了解并利用 OSGi 来 assemble 产品)和库之间保持清晰的区别允许您以后在 OSGi 上下文之外重新使用您的代码。