问题标签 [embedded-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 投票
1 回答
97 浏览

java - Apache Felix Host 暴露依赖 OSGi

我正在使用 Apache Felix 创建嵌入式 OSGi 主机应用程序。我正在使用以下代码来公开我想要公开的包:

一切都很好,这些包都暴露了。但是,我需要捆绑包才能访问所有宿主项目声明的依赖项。因此,例如,父应用程序声明了 Jackson、Apache(各种)等,我需要捆绑包才能访问这些。

我尝试显式添加包,但是当它们是依赖项时,这似乎并没有起到作用。因此,例如在捆绑包中我想使用 Jacksons com.fasterxml.jackson.core.type.TypeReference;,所以我添加com.fasterxml.jackson.core.type到上面的 EXTRA 列表中,但它似乎没有解决问题,包仍然没有暴露。

在一项完美的工作中,我只想让所有主机依赖项都可用,而不必明确说明每个依赖项。

0 投票
4 回答
6027 浏览

java - 准备好maven依赖OSGi

我试图在 JFUSE 项目中连接数据库。我在 pom 文件中包含了 com.mysql.jdbc 依赖项,并且项目构建运行良好。但是后来我遇到了这个烦人的问题。当我尝试将捆绑包安装到 OSGi 时,安装失败并出现以下错误:

无法启动捆绑 mvn:com.info.demo/demo-rest/1.0:捆绑 com.info.demo.rest [363] 中未解决的 constraint:无法解决 363.0:缺少要求 [363.0] osgi.wiring.package;(osgi.wiring.package=com.mysql.jdbc)

我尝试了 SO 提供的所有可用解决方案,但他们没有解决问题。当我试图找出错误原因时,我在 IDE 中的 mysql 依赖声明中看到警告说:

Maven 依赖没有 OSGi 准备好

所以,我想主要原因是我的依赖还没有为 OSGi 容器做好准备。谁能帮我准备好maven依赖OSGi?

下面是我的 pom.xml 代码:

编辑: 我听从了克里斯汀的建议,效果很好。但我需要添加其他未准备好 OSGi 的依赖项。

我将非 OSGi 依赖项安装到 FUSE 服务器。并且还包装了依赖项,但没有解决问题。

请帮助我详细解决方案,我真的被困在这里。

0 投票
1 回答
613 浏览

osgi - Felix GoGo Shell 抛出 MalformedURLException:未知协议:Equinox 中的 bundleresource

我正在编写一个名为ZAP的 Java 应用程序的扩展。扩展是一个内嵌Equinox bundle ( )的 fat/uber jar 。此 jar 中还包含其他捆绑包,位于子目录中。如如何嵌入 OSGi中所述,OSGi 框架正在启动。org.eclipse.osgibundles

我正在尝试按照Eclipse 的“Console Shell”文档中概述的步骤让 Felix GoGo shell 工作。它指定了以下必需的捆绑包:

  • org.apache.felix.gogo.command
  • org.apache.felix.gogo.runtime
  • org.apache.felix.gogo.shell
  • org.eclipse.equinox.console

除了春分 / org.eclipse.osgi。由于 Equinox 不在类路径上,因此我将org.osgi.framework.system.packages.extra配置设置为 Equinox 包指定的值,在此处Export-Package可见。

一旦框架处于 ACTIVE 状态,我会在 Eclipse 中(或通过 Eclipse 外部的命令行)看到以下堆栈跟踪:

GoGo 似乎没有使用 Equinox URL 处理程序。我注意到与它们相关的以下软件包不在 Equinox 中Export-Package

  • org.eclipse.osgi.storage.url
  • org.eclipse.osgi.storage.url.bundleresource
  • org.eclipse.osgi.storage.url.bundleentry

所以我也将这些包含在org.osgi.framework.system.packages.extra包列表中。那没有帮助。

捆绑包已安装并启动,否则不会出现任何明显错误。

如何让 GoGo 使用 Equinox 的自定义 URL 处理程序?

更新 1:也许是红鲱鱼

在随机故障排除中,我想执行此处概述的最终阴影 jar 。我在同一个目录中复制了原始org.eclipse.osgi包和阴影 jar。有一个configuration/config.ini指定要加载的捆绑包。

执行 stock bundle 会打开控制台:

执行阴影罐,不是那么多:

这可能是一个完全的红鲱鱼......我对OSGi非常无知,这是我第一次亲身体验它。但是,我希望阴影 jar 的执行与股票 Equinox jar 没有什么不同。因为我不明白为什么会有不同,所以我会在那里挖掘,因为没有更好的地方可以挖掘......

更新 2:Classpath 上的 Equinox 围绕问题工作

我通过其目录将 Equinox 捆绑包添加到 ZAP 的类路径中lib,并将其从内联到扩展 jar 中删除。这样做并将ServiceLoader.load调用调整为不包含类加载器(默认为系统类加载器)可以:

潜在的问题可能是如何内联 jar,可能与MANIFEST.MF文件有关。可能相关,我现在不需要为org.osgi.framework.system.packages.extra.

我将不回答这个问题,因为最初的目的是将 OSGi 库作为阴影工件包含在内。也许 bndtools 可以提供帮助?

0 投票
2 回答
526 浏览

java - Felix OSGI 嵌入式应用程序问题

我将 Felix 用作嵌入式应用程序,如 如何从代码中启动和使用 Apache Felix?. 我想要做的是通过 OSGi 从我的主机应用程序动态加载 jar 文件并调用实现类的方法。

所以我有以下三个maven项目

1)一个有接口的maven项目。并且导出了这个接口的包。---> 项目。

2) 一个实现项目 --> ProjB,另一个 maven 项目,它将 ProjA 作为 maven 依赖项导入并使用具体类在其上实现接口。同样在这个项目中,我为 ProjA 接口包做 OSGi 导入包。同样在这里,我通过激活器在 OSGI 上注册了我的实现。

3)然后是托管应用程序的ProjC。我在那里做的是,

一切正常,直到演员。在那里我可以看到以下错误,

任何人都可以帮我解决这个问题,对我来说,这似乎是 felix 上的一个错误。

0 投票
2 回答
2604 浏览

osgi - 如何使用“bnd-maven-plugin”在我的 OSGi 捆绑 jar 中添加所有第三方 jar(可解析)?

我正在使用“bnd-maven-plugin”开发 OSGi 应用程序 https://github.com/bndtools/bnd/tree/master/maven/bnd-maven-plugin

我的项目中有许多第三方 jar,通过 maven 引用。

当我使用'maven install'创建jar包时,我会得到它,当我在felix上部署它时,它不会得到解析其他依赖的第三方jar。

它正在使用'maven-bundle-plugin' http://www.lucamasini.net/Home/osgi-with-felix/creating-osgi-bundles-of-your-maven-dependencies

带有“ bnd-maven-plugin ”的POM文件如下:

下面一个是为“ maven-bundle-plugin ”工作的POM

0 投票
1 回答
2045 浏览

osgi - java.lang.ClassCastException:com.sun.xml.internal.ws.client.sei.SEIStub 无法转换为 org.apache.cxf.frontend.clientproxy AEM OSGi

我正在尝试在 AEM 的 osgi 环境中使用fuelsdk。我收到此错误 -

java.lang.ClassCastException:com.sun.xml.internal.ws.client.sei.SEIStub 无法转换为 org.apache.cxf.frontend.ClientProxy

这是因为 OSGi 在嵌入了fuelsdk 依赖项的包之前加载了系统包。捆绑包得到解决;此错误发生在运行时。

如何强制 OSGi 类加载器在运行时选择 org.apache.cxf.frontend.ClientProxy 而不是 com.sun.xml.internal.ws.client.sei.SEIStub?

我可以使用'uses'指令的组合吗?和/或导入/导出包?

有人建议我使用 -

我想知道我应该在 factory.setServiceClass() 中使用哪个类;

我应该在 factory.setAddress() 中使用哪个地址;是端点地址吗?-- https://webservice.s6.exacttarget.com/Service.asmx

非常感谢帮助谢谢

0 投票
1 回答
685 浏览

osgi - 没有 osgi 就绪依赖项

目前我正在使用 osgi 和 karaf。

我的问题是没有“osgi ready”依赖项,这意味着一个 jar 还没有准备好作为捆绑部署到 karaf 中。

为了解决此类问题,我尝试了两种解决方案:

  • 我尝试使用“Embed-Dependency”,它将
    在项目中包含 jar 依赖项......我认为这不是一个解决方案,因为当我尝试嵌入 jar 时,它会要求我包含其他 jar第一个 jar 依赖于,依此类推..

  • 我尝试使用 bnd 工具或来自 eclipse 项目的“来自现有 JAR 存档的插件”将没有“osgi 就绪”的 jar 转换为包。这导致了相同的结果,每个 jar 都会调用它所依赖的另一个 jar..

我不确定我是否以错误的方式做这件事或究竟是什么问题。任何提示如何处理没有 osgi 就绪依赖项?

0 投票
1 回答
150 浏览

osgi - 无法以编程方式启动捆绑包

注意:就我而言,如果这很重要,我正在使用Apache Felix实现。

我已经编写了我用作测试的捆绑包。这是一个非常简单的“Hello World”包,它只stdout在启动/停止时打印消息:

还有一个MANIFEST文件发布起来毫无意义,因为当我通过Apache Felix控制台从标准发行版(可以在此处下载)部署上述捆绑包时,捆绑包开始并打印出消息。


我要做的下一步是使用编程方法部署相同的包。不幸的是,这对我不起作用。我的代码如下所示:

输出如下所示:

据我所知,捆绑包已安装,但最后 4 行表明bundle.start()由于某种原因被忽略了。

你能指出我缺少什么来完成这项工作吗?

0 投票
1 回答
262 浏览

java - 如何管理嵌入式 OSGi 应用程序中的捆绑包/依赖项?

我目前正在开发一个插件系统,我在我的应用程序中嵌入了 apache felix。插件本身就是 OSGi 包。到目前为止,部署捆绑包工作得很好,但我无法与我的捆绑包/插件交互。我尝试了两种方法:

  • 在我的插件中注册服务“插件”,并在我的“主机”应用程序中使用服务侦听器与插件交互。

未调用服务侦听器,并且我无法转换返回的 Plugin 对象,因为我的 Host 应用程序的 Plugin.class 与捆绑包内的 Plugin.class 不同。

  • 在宿主应用程序中注册“PluginManager”并将该管理器加载到包中。

在这种情况下,由于此类“重复”问题,我再次无法转换服务类。

我理解为什么这些类是“重复的”,但我不知道该怎么做。

我目前的设置:

  • plugin-api maven 模块:提供插件接口
  • app maven 模块:包含嵌入 Apache Felix 的应用程序
  • dummy 插件仅依赖于 plugin-api

我的设置结构有问题吗?如何在不造成课堂混乱的情况下访问主机服务?我是否应该创建另一个模块来编译我的插件,但它被排除在包之外,然后通过 FRAMEWORK_SYSTEMPACKAGES_EXTRA 在主机上提供?

0 投票
0 回答
384 浏览

osgi - 刷新包捆绑

我偶然发现了一个问题,可以总结如下:

我有一个嵌入 OSGI 的应用程序。在这个 OSGI 容器中,我安装了一个 v1 版本的包 A,它注册了该服务对象。此服务对象由主机应用程序使用。在使用服务对象时,我卸载了捆绑包 A 并安装了捆绑包 A 的新版本 (v2)。这是我的发现。

  • 即使我们卸载捆绑包 A(v1),旧服务对象也能正常工作。
  • 新的服务对象提供了 bundle A(v2) 的新功能。

我的问题是当我们使用刷新捆绑包时

当我们尝试获取新版本的bundle A注册的服务对象时,它返回null。我尝试查看源代码,但没有帮助。你能帮我解决这个问题吗?

编辑:

主机应用程序

当我们刷新捆绑包时到底发生了什么?

BundleA_Activator.java