问题标签 [osgi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2562 浏览

java - 何时应该将多模块项目拆分为单独的存储库树?

目前我们有一个具有标准颠覆存储库布局的项目:

./trunk
./branches
./tags

然而,随着我们沿着 OSGi 和模块化项目的道路前进,我们最终得到了:

./trunk/bundle/main
./trunk/bundle/modulea
./trunk/bundle/moduleb ./tags/bundle/main-1.0.0
./tags/bundle/main-1.0.1
./tags/bundle/modulea -1.0.0

“构建”仍然非常单一,因为它按顺序构建所有模块,尽管我开始怀疑我们是否应该将构建/存储库重构为更像:

./bundle/main/trunk
./bundle/main/tags/main-1.0.0
./bundle/main/tags/main-1.0.1
./bundle/modulea/trunk
./bundle/modulea/tags/modulea- 1.0.0

在这种模式下,我会想象每个模块都构建自己,并将其二进制文件存储在存储库中(maven、ivy 或 subversion 存储库本身的其他路径)。

一旦模块化,是否有关于项目布局的指导方针或“最佳实践”?

0 投票
8 回答
11995 浏览

java - 开始使用 OSGI 的最佳方式是什么?

是什么让模块/服务/应用程序功能位成为 OSGi 模块特别好的候选者?

我对在我的应用程序中使用OSGi很感兴趣。我们是一家 Java 商店,我们非常广泛地使用 Spring,所以我倾向于使用Spring Dynamic Modules for OSGi(tm) Service Platforms。我正在寻找一种将一点 OSGi 合并到应用程序中作为试用的好方法。这里有人使用过这个或类似的 OSGi 技术吗?有什么陷阱吗?

@Nicolas - 谢谢,我看过那个。这是一个很好的教程,但我正在寻找更多关于如何制作我的第一个“真正的”OSGi 包的想法,而不是 Hello World 示例。

@david - 感谢您的链接!理想情况下,使用全新的应用程序,我会将整个事物设计为动态的。不过,我现在正在寻找的是在现有应用程序的一小部分中引入它。假设我可以选择应用程序的任何部分,有哪些因素可以使该部分成为更好或更差的 OSGi 豚鼠?

0 投票
9 回答
8786 浏览

dependencies - 如何管理 OSGi 构建依赖项?

我们已将 OSGi 运行时 (Equinox) 嵌入到自定义客户端-服务器应用程序中,以促进插件开发,到目前为止一切进展顺利。由于内置的​​清单编辑器、依赖管理和导出向导,我们一直在使用 Eclipse 构建插件。使用 Eclipse 来管理构建对于通过 Hudson 进行持续集成不是很有利。

我们有依赖于其他 OSGi 包的 OSGi 包。我真的很讨厌在自定义 ANT 构建中对构建顺序进行硬编码。我们已经这样做了,这已经是过去了,而且非常可怕。是否有任何构建工具可以轻松管理 OSGi 依赖项,如果不能自动解决它们?是否有任何体面的例子说明如何做到这一点?

澄清:

生成的构建脚本只能通过 Eclipse 使用。它们需要手动运行 Eclipse 的各个部分。我们还有一些 Eclipse 构建没有的标准目标,我不想修改生成的文件,因为我可能会重新生成(我知道我可以做包含,但我想避免所有 Eclipse 生成文件一起)

这是我的项目布局:

在使用 Eclipse PDE 时,每个插件都有一个 Manifest,但没有 build.xml,因为 PDE 会为我这样做。很难用 Hudson 自动化一个 gui 驱动的过程。我想设置我自己的 build.xml 来构建每个,但是存在依赖项和构建顺序问题。这些问题是由 Manifest 文件(描述 OSGi 导入)驱动的。例如,PluginC 依赖于 PluginB,而 PluginB 又依赖于 PluginA。它们必须以正确的顺序构建。我意识到我可以手动控制构建顺序,我正在寻找一种工具来帮助自动化构建顺序依赖管理。

0 投票
5 回答
504 浏览

java - 公开远程接口或对象模型

我对公开异步远程接口的最佳方式有疑问。

条件如下:

  • 协议是异步的
  • 第三方可以随时修改数据
  • 命令往返可能很重要
  • 该模型应该非常适合 UI 交互
  • 该协议支持对某些对象的查询,模型也必须如此

作为改善我在这方面缺乏技能的一种手段(并全面提高我的 Java),我已经开始了一个项目来为xmms2创建一个基于 Eclipse 的前端(如下所述)。

所以,问题是;我应该如何将远程接口公开为一个整洁的数据模型(在这种情况下,跟踪管理和事件处理)?

我欢迎从一般讨论到模式名称删除或具体示例和补丁的任何内容:)


我在这里的主要目标是总体上了解这类问题。如果我的项目可以从中受益,那很好,但我严格介绍它是为了有一些东西可以开始讨论。

我已经实现了一个协议抽象,我称之为“客户端”(出于遗留原因),它允许我使用我很满意的方法调用来访问大多数公开的功能,即使它远非完美。

xmms2 守护程序提供的功能包括曲目搜索、元数据检索和操作、更改播放状态、加载播放列表等等。

我正在更新到 xmms2 的最新稳定版本,我想我不妨修复当前实现的一些明显弱点。

我的计划是在协议接口之上构建一个更好的抽象,允许与守护进程进行更自然的交互。当前的“模型”实现很难使用,而且坦率地说非常丑陋(更不用说真正可怕的 UI 代码了)。

今天我有了Tracks接口,我可以使用它来根据Track类的 id获取实例。搜索是通过Collections接口(不幸的命名空间冲突)执行的,我认为我宁愿将其移至 Tracks。

任何数据都可以随时被第三方修改,这应该在模型和分发的变更通知中得到适当的反映

这些接口在连接时通过返回如下所示的对象层次结构公开:

  • 联系
    • 回放 getPlayback()
      • 播放、暂停、跳转、当前曲目等
      • 公开播放状态更改
    • 轨道 getTracks()
      • 跟踪 getTrack(id) 等
      • 公开音轨更新
    • 集合 getCollection()
      • 加载和操作播放列表或命名集合
      • 查询媒体库
      • 公开集合更新
0 投票
14 回答
11882 浏览

java - OSGi 测试

目前,我正在开发一个新的版本控制系统,作为大学最后一年项目的一部分。我们的想法是使其具有高度的适应性和可插拔性。

我们使用 OSGi 框架(Equinox 实现)来管理我们的插件。我的问题是我找不到一个简单易用的方法来测试 OSGi 包。

目前,我必须使用 Maven 构建包,然后执行测试工具。我正在寻找类似 Eclipse 的 JUnit 测试运行器之类的东西,因为它可以为我节省大量时间。

有没有一种快速简便的方法来测试 OSGi 包?

编辑:我不需要测试 Eclipse 插件或 GUI 组件,只需要 OSGi 包。

EDIT2:是否有一些支持 JUnit4 的框架?

0 投票
15 回答
71612 浏览

java - OSGi 解决了什么问题?

我在 Wikipedia 和其他网站上阅读过有关OSGi的信息,但我并没有真正看到全局。它说它是一个基于组件的平台,并且您可以在运行时重新加载模块。此外,随处可见的“实际示例”是 Eclipse 插件框架。

我的问题是:

  1. OSGi 的清晰和简单的定义是什么?

  2. 它解决了哪些常见问题?

我所说的“常见问题”是指我们每天面临的问题,例如“OSGi 可以做些什么来让我们的工作更高效/有趣/简单?”

0 投票
4 回答
1589 浏览

osgi - 如何将 SpringSource dm 服务器集成到另一个基于 OSGi 的应用程序服务器中?

我真的很想使用 SpringSource dm Server,但我们的客户要求我们在他们的应用程序服务器(Websphere)上运行我们的应用程序。有没有办法将 SpringSource dm Server 与其他应用程序服务器集成?至少 dm Server 是基于 OSGi 构建的,许多其他应用服务器(包括 Websphere)也是基于 OSGi 的。是否可以将 SpringSource dm 服务器作为 websphere 组件运行?

0 投票
2 回答
1613 浏览

java - 您可以在不同的 OSGi 包中包含 JSF 自定义组件吗?

有人一起使用过 OSGi 和 JSF 吗?

我问是因为 JSF 使用类加载器魔法来查找自定义组件。从教程(强调我的):

此配置文件最终将成为代表此组件的 .jar 文件中的 META-INF/faces-config.xml。JSF 将在运行时加载的每个 .jar 文件(在 WEB-INF/lib 目录中的 .war 文件)中查找这样的文件名,并在其配置中使用它们中的每一个。通过这种方式,可以将多个组件 .jar 文件组合成一个 Web 应用程序,并且每个 .jar 中描述的所有组件都将可供应用程序使用。

我希望能够将 JSF 自定义组件作为 OSGi 包(即自定义组件位于与 JSF 运行时不同的 OSGi 包中),并且 JSF 能够在运行时找到这些。

有没有人做过类似的事情?

0 投票
2 回答
22444 浏览

java - 登录 Eclipse/OSGi 插件

我开始开发一个 Eclipse 插件(从技术上讲,一个 OSGi 插件),我遇到的第一个问题是我似乎无法像往常一样控制公共日志输出。

我在插件依赖项中包含了 commons-logging 包,实际上,当我记录某些内容(在 INFO 或更高严重性下)时,它会记录到控制台。但是,我似乎无法在任何较低级别(例如 DEBUG 或 TRACE)登录。

我指定了一个 log4j.properties 文件,它位于类路径中(对于运行时,就像 commons-logging 包一样),但该属性文件中的任何设置都不会影响记录器的行为。

这是 log4j.properties 文件:

我需要做什么才能真正控制记录器的输出?

以下是一些示例输出消息,希望格式可能与 java.util.logging 的默认值一致,或向某人提供其他提示:

更新:

我现在尝试了以下各种组合:

如果我在提示符下手动运行 OSGi(这对于我正在开发的东西是不切实际的),我只能获得 DEBUG 或更低级别的消息。此外,我无法通过各种属性文件影响任何其他类型的日志记录配置。我在这方面尝试的一切似乎都被日食设置所覆盖。

我还尝试将上述库的各种配置文件放在许多地方,包括按照此处的建议作为附加到各自库的插件片段,但仍然会发生相同的结果。

我已经实现了一个自定义 LogListener,并使用 System.out.println 跟踪了日志消息的整个路径(无论如何我都知道如何),并且调试消息一直存在,直到它们被任何底层日志记录 API 输出我正在使用,然后它们消失了。

0 投票
2 回答
2513 浏览

java - 有人使用 OSGi 的 OBR 吗?

有人使用 OSGi Bundle Repository 吗?