我想开发一个系统来管理文本文件的读数。主要结构基于4个捆绑包:
timestamp
log
log
(将timestamp
和值添加到文件中)timestamp
和读数我的问题是:每个bundle
应如何组织?我不是100%熟悉OSGi
工作方式,而是我正在做的事情。我目前的结构如下:
bundle
activator
s,我在其中注册service
s interfaces
,虽然我不确定我是否应该在同一个包中实现这是对的吗?提前谢谢。
答案 0 :(得分:0)
您可以将接口分离到不同的包中。通常,您希望每个包都导出包含接口的包,但不包括实现包。这将有助于最小化束之间的耦合。
看起来您在一个项目中拥有所有服务,这将导致它们都在同一个OSGi包中。您应该使用自己的清单文件将每个项目分离到自己的项目中。这样,服务可以独立开发和部署,并通过服务接口进行通信。
答案 1 :(得分:0)
有几点想法。首先将代码组织到包中,然后捆绑第二个。假设您是基于包而不是bundle来表示依赖关系,那么以后拆分包相对容易。
其次,捆绑您的预期用途并重复使用。这是同一个单元的一部分吗?如果是这样,我有一个API包和一个或多个实现包。如果您希望人们稍后混合搭配(例如,将数据文件界面与时间界面分开使用),则那些(可能)属于单独的捆绑包。
我看到了一些叫做“激活者”的不同事物。激活器管理捆绑包的生命周期(启动,关闭等)。我通常每捆创建一个激活剂,并将其置于“内部”中。包裹以澄清它不应该逃脱。
最后,请记住库代码和应用程序代码之间的区别。如果你想在不同的应用程序中重用一个bundle(有点重要),它可能不应该启动自己的服务(通过激活器或声明性服务)。在应用程序(了解和利用OSGi以组装产品的事物)和库之间保持清晰的区别,允许您稍后在OSGi上下文之外重用代码。