问题标签 [declarative-services]
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.
eclipse - OSGI:等待声明式服务组件启动的最佳方法是什么?
我有以下问题:
1:激活 OSGI 包 A(Equinox),激活器解析 XML 文件
2:在 XML 文件中,请求声明性服务,该服务存在于另一个包(B)中
3:包 B 尚未激活,所以bundle A的激活器需要等待
我知道如何纯粹在 DS 中处理这个问题,但是解析需要在激活器中进行。另外,我不想在开始级别之类的东西上胡闹。理想情况下,我希望能够在需要时注册捆绑 B 提供的服务。
有没有一种优雅的方式来实现这一目标?
谢谢,
基斯
java - OSGi 声明式服务和 Spring
我有一个数据访问模块,它使用 Spring 和 JDBC 提供存储库的实现。
因此,我定义了一个 Spring 上下文如下:
我还使用声明式服务将存储库实现公开为服务,如下所示:
因此,我的服务是在 Spring 环境之外创建的,因此它们没有完全配置(例如,没有注入数据源)。
我正在寻找将 Spring 与声明式服务集成的正确方法。
谢谢,米凯尔
java - 在运行时获取声明式服务
当您在运行时之前不知道要请求的服务的属性时,获取服务的正确方法是什么,如果可能的话,希望使用声明式服务?
该用例类似于有 3 个提供服务版本 1.0、2.0 和 3.0 的捆绑包,但直到用户在 UI 中选择一个之后才知道将使用哪一个。如果用户选择 2.0,消费者将使用 bundle 2.0 中的东西
我们正在使用 BND 注释,所以带有它们的东西会是理想的,但我有一种感觉,我们需要直接使用 OSGi API,而不是使用注释或声明性服务注入。
最后,如果它是相关的,这更多的是获得资源的不同版本(XML 模式),而不是不同的行为/实现。这个想法是服务将提供其内部资源,每个版本都会有所不同,即使服务本身的代码是相同的
osgi - OSGi 服务:请求捆绑包/组件的引用服务
我目前正在为 OSGi 服务“苦苦挣扎”,或者更具体地说,是在服务之间的布线上“苦苦挣扎”。我了解 DS、SCR 的基础知识以及组件实例获取服务的一般策略。无论如何,这是我的问题:
在 DS 之后,组件在 XML 文件中声明它们提供和使用的服务。在我的例子中,我对特定组件的“使用/引用”服务(由组件的 XML 文件中的“引用”标记声明)感兴趣。
例如,考虑一个正在运行的 OSGi 应用程序:一堆基于服务 (DS) 相互协作的包。现在,我想选择一个特定的捆绑包并查询它对它(可能)使用的服务的所有引用——无论这些服务当前是否可用。
参考 Apache Felix GoGo shell 命令,例如检查需求 *,我确实获得了有关导入包等的信息,但没有获得有关所使用服务的完整概述(-> 当前使用的服务和组件正在等待的服务)。
我已经阅读了框架 API,它提供了对服务注册、修改和注销的洞察力,但显然,它没有提供有关服务包正在等待什么的信息。按照 OSGi 核心规范,这可以通过Listener Hook来实现。
有没有一种方法,我可以查询例如 SCR 以获取特定捆绑包的所有引用服务?显然,SCR 应该读取 bundle 的 Service-Component-XML-file 并“注册”某种“Service Tracker”来跟踪消费/引用的服务——因此,bundle 的消费/引用服务的信息应该以某种方式可用,不是吗?
如果您能帮我解决这个问题,那就太好了。
谢谢,唐
java - OSGi - 按名称(id)获取 ds 服务
我是 OSGi 的新手。我用谷歌搜索了大约几个小时,但找不到答案。也许我的理解是错误的。所以问题。假设我有一个组件。
在代码中:
但我明白了null
。错误在哪里?过滤器(name=sample.component)
对吗?或者我如何设置服务的 ID 并通过它查找?
java - Bundle 使用 DS 多次实例化
我正在创建一个包含大量捆绑包的应用程序。其中一些是接口,一些是这些接口的实现。我使用声明式服务 (DS) 来提供和使用服务,这意味着每个包都有一个 component.xml 描述我正在提供/引用的服务。
目前我有一个ClockWidget
实现 3 个接口的类(如您在附图中所见)。对于实现的每个服务,我都有一个引用该服务的特定类。例如,Timeout
该类具有接收任何实现该TimeoutListener
服务的人的绑定方法。
问题是ClockWidget
类的构造函数被调用了 3 次。显然,我将其与其他捆绑包使用的服务数量相关联。
问题是:为了处理实现多个服务的捆绑包,有什么好的方法/实践?我的意思是,我不希望这个捆绑包在应用程序中重复。我想在引用这个人的三个类中使用相同的实例。我尝试在清单中启用单例属性,但没有任何改变。
ClockWidget.class
:
其组件定义ClockWidget.xml
使用由 提供的服务的类ClockWidget
。在这种情况下,Timeout
类:
超时组件说明:
有什么建议吗?
java - 尝试在 OSGI 中创建抽象包
我想在 OSGI 中创建一个抽象包。这个想法是,当我们说捆绑 Ax(x 从 1 到 9)需要通过 B 提供的服务绑定到捆绑 B 时,这可以通过制作 asbtractA 来更容易地完成(所以 Ax 扩展了 abstractA)
这里的 abstractA 是一个带有 declerative 服务文件的包。xml 文件描述了捆绑 B 的引用服务,并在相应的 abstractA 类中实现了绑定解除绑定和启动方法。
假设 Ax 有它自己的 start 方法 startx,并绑定到几个服务,所以 bundle 有他自己的 .xml 文件。
问题:是否会同时调用 start(来自 abstractBundle)和 startx?bundleAx 和 bundleabstractA 的引用服务的绑定会发生吗?
java - 使用 DS 注释时 Gradle 不生成 SERVICE_COMPONENT
我在我的项目中使用声明式服务注释以及 gradle。
我在我的组件类中指定了相应的注释(@Component 等)。我还在 gradle 文件中添加了对 felix scr 注释项目的依赖项。但是,当我构建我的项目时,不会生成组件 xml 文件,而且 Manifest.MF 文件中的 Service-Component 标头也不会生成。
我在 gradle 中使用 'osgi' 插件来生成 OSGI 包。
gradle 是否提供这种支持?通过使用 maven-scr 插件可以在 maven 中实现。我们在 gradle 中有这样的插件吗?
任何帮助,将不胜感激。
java - 使用 gradle 生成 OSGI-INF/serviceComponent.xml
可以使用 maven scr felix 插件通过添加依赖项来生成 OSGI-INF/serviceComponent.xml
但对于 gradle 我无法生成.. 我试图添加
它给出了找不到 be.jlr-home.gradle 的错误。
我做错了什么???
基本上我需要在gradle中添加依赖来生成servicecomponent.xml
xml - OSGi 声明式服务组件描述中的多个事件主题
我确信它真的很简单,但是我无法理解使我的组件在 OSGi 框架中侦听多个事件主题所需的 XML 模式。
我想处理以下两个事件,有时甚至更多:
我试过这样的东西
或者
或者
不幸的是,我的 OSGi 书只使用了一个事件主题,令人惊讶的是,我在网上找不到任何东西。我试图通过 DS 组件描述的 XML 模式但未能理解它:http ://www.osgi.org/xmlns/scr/v1.2.0/scr.xsd