Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 项目的OSGi结构_Java_Osgi_Modular - Fatal编程技术网

Java 项目的OSGi结构

Java 项目的OSGi结构,java,osgi,modular,Java,Osgi,Modular,我想开发一个系统来管理文本文件中的读数。主要结构基于4个线束: 为日志提供时间戳 一个是生成/提供数据 保存日志(将时间戳和值添加到文件中) 用时间戳和读数可视化生成的文件 我的问题是:每个包应该如何组织?我对OSGi的工作方式不是100%熟悉,这是我正在研究的东西。我目前的结构如下: *接口文件是我提供服务的地方 *Activator文件是捆绑包Activators,我在其中注册服务s *Impl文件用于实现接口,尽管我不确定是否应该在同一个包中实现 对吗?提前感谢。您将接口分为不同

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

  • 日志提供
    时间戳
  • 一个是生成/提供数据
  • 保存
    日志
    (将
    时间戳
    和值添加到文件中)
  • 时间戳和读数可视化生成的文件
我的问题是:每个
包应该如何组织?我对OSGi的工作方式不是100%熟悉,这是我正在研究的东西。我目前的结构如下:

  • *接口文件是我提供服务的地方
  • *Activator文件是
    捆绑包
    Activator
    s,我在其中注册
    服务
    s
  • *Impl文件用于实现
    接口
    ,尽管我不确定是否应该在同一个包中实现

对吗?提前感谢。

您将接口分为不同的实现包是正确的。通常,您希望每个包导出包含接口的包,而不是实现包。这将有助于最大限度地减少线束之间的耦合


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

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

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

我看到两种不同的东西叫做“激活器”。激活器管理捆绑包的生命周期(启动、关闭等)。我通常每个bundle最多创建一个activator,并将其放在一个“.internal”包中,以澄清它不应该逃逸


最后,请记住库代码和应用程序代码之间的区别。如果您想在不同的应用程序中重用捆绑包(有点像),它可能不应该启动自己的服务(通过激活器或声明性服务)。在应用程序(了解并利用OSGi组装产品的东西)和库之间保持清晰的区别,允许您以后在OSGi上下文之外重用代码

谢谢你的回答。若你们不介意的话,请继续提问。我应该在注册服务时提供实现吗?我能找到的所有信息都是将接口初始化为实现此类接口的类(在activator中),然后ServiceRegistration向所述类注册服务。注册服务时需要提供实现,然而,使用同一个服务接口注册多个不同的实现是可能的,因此值得研究声明性服务,因为这使注册和使用服务的整个工作变得更加容易。