Java 项目的OSGi结构
我想开发一个系统来管理文本文件中的读数。主要结构基于4个线束:Java 项目的OSGi结构,java,osgi,modular,Java,Osgi,Modular,我想开发一个系统来管理文本文件中的读数。主要结构基于4个线束: 为日志提供时间戳 一个是生成/提供数据 保存日志(将时间戳和值添加到文件中) 用时间戳和读数可视化生成的文件 我的问题是:每个包应该如何组织?我对OSGi的工作方式不是100%熟悉,这是我正在研究的东西。我目前的结构如下: *接口文件是我提供服务的地方 *Activator文件是捆绑包Activators,我在其中注册服务s *Impl文件用于实现接口,尽管我不确定是否应该在同一个包中实现 对吗?提前感谢。您将接口分为不同
- 为
日志提供
时间戳
- 一个是生成/提供数据
- 保存
(将日志
和值添加到文件中)时间戳
- 用
时间戳和读数可视化生成的文件
包应该如何组织?我对OSGi的工作方式不是100%熟悉,这是我正在研究的东西。我目前的结构如下:
- *接口文件是我提供服务的地方
- *Activator文件是
捆绑包
Activator
s,我在其中注册服务
s
- *Impl文件用于实现
接口
,尽管我不确定是否应该在同一个包中实现
对吗?提前感谢。您将接口分为不同的实现包是正确的。通常,您希望每个包导出包含接口的包,而不是实现包。这将有助于最大限度地减少线束之间的耦合
看起来您的所有服务都在一个项目中,这将导致它们都在同一个OSGi包中。您可能应该使用自己的清单文件将每个文件分离到自己的项目中。这样,可以独立开发和部署服务,并通过服务接口进行通信。一些想法。首先将代码组织到包中,然后将其打包。假设您是基于包而不是捆绑包来表达依赖关系,那么以后拆分捆绑包就相对容易了
其次,围绕您的预期用途和重用进行捆绑。这都是同一个单元的一部分吗?如果是这样,我会有一个API包和一个或多个实现包。如果您希望人们以后进行混合和匹配(例如,将数据文件接口与时间接口分开使用),那么这些(可能)属于单独的捆绑包
我看到两种不同的东西叫做“激活器”。激活器管理捆绑包的生命周期(启动、关闭等)。我通常每个bundle最多创建一个activator,并将其放在一个“.internal”包中,以澄清它不应该逃逸
最后,请记住库代码和应用程序代码之间的区别。如果您想在不同的应用程序中重用捆绑包(有点像),它可能不应该启动自己的服务(通过激活器或声明性服务)。在应用程序(了解并利用OSGi组装产品的东西)和库之间保持清晰的区别,允许您以后在OSGi上下文之外重用代码 谢谢你的回答。若你们不介意的话,请继续提问。我应该在注册服务时提供实现吗?我能找到的所有信息都是将接口初始化为实现此类接口的类(在activator中),然后ServiceRegistration向所述类注册服务。注册服务时需要提供实现,然而,使用同一个服务接口注册多个不同的实现是可能的,因此值得研究声明性服务,因为这使注册和使用服务的整个工作变得更加容易。