问题标签 [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 投票
2 回答
4101 浏览

elasticsearch - java.util.ServiceConfigurationError 使用 OSGi 包时提供程序不是子类型

我正在创建一个 Liferay 7.1 OSGi 包,其中包含一些外部依赖项。考虑到时间,我们选择将外部 JAR 嵌入到我们的 OSGi Bundle 中。我设法创建了一个 bnd 文件,其中包括所有 ElasticSearch 依赖项,并将它们放在包类路径中。我使用了来自 github 的源代码(https://github.com/liferay/liferay-portal/blob/master/modules/apps/portal-search-elasticsearch6/portal-search-elasticsearch6-impl/build.gradle ) 和 bnd.bnd 文件,以检查导入的内容。

激活捆绑包时,会引发异常:

XContentBuilderExtension 来自 elasticsearch-x-content-6.5.0.jar,XContentElasticsearchExtension 类包含在 elasticsearch-6.5.0.jar 中。两者都是包含的资源,并已放在类路径中。

激活方法在我的另一个 jar 中初始化一个 TransportClient,因此它发生在激活时;)。

编辑:

我注意到第一次安装此错误或门户重新启动时不会发生此错误。所以它只发生在我卸载并重新安装捆绑包时。(这是我非常喜欢的功能!)。也许是一个愚蠢的想法。但会不会有一些“悬线”?捆绑包没有正确安装,或者 TransportClient 仍然存在?我正在检查这个。欢迎任何提示!

编辑2:

我担心这是SPI和OSGi之间的不兼容?我已经检查过:High Level Rest Client 也有同样的问题。(但随后有另一个扩展名)。我将尝试使用 Low-Level Rest Client。这应该可行,因为我猜依赖最少。我仍然很好奇为什么存在不兼容。我当然不是 OSGi 方面的专家,也不是 SPI 方面的专家。(是时候学习新东西了!)

0 投票
1 回答
318 浏览

osgi - 系统捆绑包如何访问系统包?

在过去的几周里,我正在探索 OSGI 是如何实现的。我知道每个包都使用自己的类加载器来加载它的类。作为我调查的一部分,我了解到每个包的类加载器的父级都是空的,即引导类加载器。

捆绑样本包中的上述代码的输出是

对于包中的导入,它维护一个 packagename=>classloader 的映射,以便它可以将请求委托给正确的类加载器

上述代码的输出是

正如您在上面输出的第一行中看到的,包com.test.packag添加为FelixConstants.FRAMEWORK_SYSTEMPACKAGES并且包 samplebundle 连接到com.test.packag系统包 [0]

因此,我想了解 system bundle[0] 如何访问由不同类加载器(App 类加载器)加载的系统包。不仅如此 OSGI 的所有核心类如 Bundle、BundleActivator、Felix 也由 App 类加载器加载。因此,我尝试调试 Felix 代码以了解系统捆绑包是否将 loadClass() 请求委托给 App 类加载器。不幸的是,在调试时我观察到 BundleWiringImpl 类的 m_wiring 变量,我注意到系统包的类加载器为(这是不可能的,因为引导类加载器只加载 java.* 包)。

如果我错了,请纠正我的理解。

我的问题是

system_bundle[0] 的类加载器是什么,它的父类加载器是什么?

如果 system_bundle 类加载器的父类不是 App 类加载器,系统捆绑包是否还维护 package=>classloader 的映射以加载由应用类加载器加载的类?

类加载器(捆绑类加载器、系统类加载器、引导类加载器和应用程序类加载器)的层次结构到底是什么?

谢谢你。

0 投票
1 回答
168 浏览

java - 嵌入 javassist 依赖会破坏 OSGi 包

我正在尝试嵌入式 Felix 场景。从嵌入式 OSGi 容器 (Apache Felix) 加载包时,我收到以下错误。

经过反复试验,我发现引入javassist会导致错误。

我正在尝试嵌入依赖项。

关于我收到此错误的原因有什么建议吗?