项目的 OSGi 结构
OSGi structure for a project
我想开发一个系统来管理文本文件中的读数。主要结构基于4个bundle:
- 一个为
log
提供 timestamp
- 一到generate/provide数据
- 一个保留
log
(将 timestamp
和值添加到文件中)
- 一个用
timestamp
和读数 可视化生成的文件
我的问题是:每个 bundle
应该如何组织?我不是 100% 熟悉 OSGi
的工作方式,这是我正在努力的事情。我目前的结构如下:
- *接口文件是我提供服务的地方
- *Activator 文件是
bundle
activator
s,我在其中注册 service
s
- *Impl 文件用于实现
interfaces
,尽管我不确定是否应该在同一个包中实现
是否正确?提前致谢。
您将接口分成不同的包来实现是正确的。通常,您希望每个包都导出包含接口的包,而不是实现包。这将有助于最小化束之间的耦合。
看起来您的所有服务都在一个项目中,这将导致它们都在同一个 OSGi 包中。您可能应该使用自己的清单文件将每个文件分离到自己的项目中。这样就可以独立开发和部署服务,并通过服务接口进行通信。
一些想法。首先将您的代码组织到包中,然后再将其打包。假设您是基于包而不是包来表达依赖关系,那么以后拆分包就相对容易了。
其次,围绕您的预期用途和再利用进行捆绑。这是同一个单元的所有部分吗?如果是这样,我将拥有一个 API 捆绑包和一个或多个实施捆绑包。如果您希望人们稍后混合搭配(例如,将数据文件接口与时间接口分开使用),那么这些(可能)属于单独的包。
我看到几个不同的东西叫做 'Activator'。激活器管理包的生命周期(启动、关闭等)。我通常为每个包最多创建一个激活器,并将其放在“.internal”包中以阐明它不应转义。
最后,请记住库代码和应用程序代码之间的区别。如果你想在不同的应用程序中重用一个包(有点意思),它可能不应该启动它自己的服务(通过激活器或声明式服务)。在应用程序(了解并利用 OSGi 来 assemble 产品)和库之间保持清晰的区别允许您以后在 OSGi 上下文之外重新使用您的代码。
我想开发一个系统来管理文本文件中的读数。主要结构基于4个bundle:
- 一个为
log
提供 - 一到generate/provide数据
- 一个保留
log
(将timestamp
和值添加到文件中) - 一个用
timestamp
和读数 可视化生成的文件
timestamp
我的问题是:每个 bundle
应该如何组织?我不是 100% 熟悉 OSGi
的工作方式,这是我正在努力的事情。我目前的结构如下:
- *接口文件是我提供服务的地方
- *Activator 文件是
bundle
activator
s,我在其中注册service
s - *Impl 文件用于实现
interfaces
,尽管我不确定是否应该在同一个包中实现
是否正确?提前致谢。
您将接口分成不同的包来实现是正确的。通常,您希望每个包都导出包含接口的包,而不是实现包。这将有助于最小化束之间的耦合。
看起来您的所有服务都在一个项目中,这将导致它们都在同一个 OSGi 包中。您可能应该使用自己的清单文件将每个文件分离到自己的项目中。这样就可以独立开发和部署服务,并通过服务接口进行通信。
一些想法。首先将您的代码组织到包中,然后再将其打包。假设您是基于包而不是包来表达依赖关系,那么以后拆分包就相对容易了。
其次,围绕您的预期用途和再利用进行捆绑。这是同一个单元的所有部分吗?如果是这样,我将拥有一个 API 捆绑包和一个或多个实施捆绑包。如果您希望人们稍后混合搭配(例如,将数据文件接口与时间接口分开使用),那么这些(可能)属于单独的包。
我看到几个不同的东西叫做 'Activator'。激活器管理包的生命周期(启动、关闭等)。我通常为每个包最多创建一个激活器,并将其放在“.internal”包中以阐明它不应转义。
最后,请记住库代码和应用程序代码之间的区别。如果你想在不同的应用程序中重用一个包(有点意思),它可能不应该启动它自己的服务(通过激活器或声明式服务)。在应用程序(了解并利用 OSGi 来 assemble 产品)和库之间保持清晰的区别允许您以后在 OSGi 上下文之外重新使用您的代码。