问题标签 [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.
communication - 你如何在 Eclipse 声明式服务和视图(ContentProviders)之间进行通信
假设您有一个带有各种视图的 Eclipse 插件,这些视图应该显示来自将数据推送到视图的某些 OSGi 包的数据。我不是让每个视图都与 OSGi 包通信,而是有一个中间 Facade 类,它充当视图的黑板并管理视图与其他 OSGi 包之间的通信——嗯,这就是理论。
问题的出现是因为 ui 包(带有视图和外观)使用声明式服务与另一个包(称为 DataStore)进行通信。由于 Data Store 从另一个源接收异步数据更新,因此它需要将内容推送到 Facade(以及其他捆绑包,如果它们可用)。OSGi 实例化 Facade 以满足对 DataStore 的 DS 配置的基数要求,但视图由 Plugin 的 IApplication 实现实例化。即使 IApplication 和 Facade 是同一个类,我也会得到两个彼此不认识的独立实例。
如何启用这些组件(插件应用程序、视图等和 OSGi 实例化外观)之间的通信?
java - 在服务启动时禁用 OSGi 服务的正确方法是什么?
我创建了一个带有公开(声明性)服务的 OSGi 包。如果我在调用 activate 时注意到有什么不对劲以至于我无法提供服务,我需要防止它被暴露。目前激活函数如下所示:
另一种选择是像这样包装/传播异常(或抛出一个新异常,取决于):
我在OSGi 服务平台服务纲要中的声明性服务部分中找不到指定的正确行为,但我可能遗漏了一些东西
java - 如何构建具有依赖关系的 OSGi 服务并通过 DS 发布
我的示例课程:
计划是在几个包中重用 SingleModelProvider 类,以提供 ModelProvider 的不同实现。我需要在每个包中完成的是使用构造函数的适当参数简单地实例化 SingleModelProvider。使用任何 DI 框架的非常简单的场景。如果可能,我想使用 DS(声明式服务)注册 ModelProvider 服务,而不必在 Activator 中编写样板代码。
这可能吗?
我似乎找不到任何有关如何完成此操作的文档,因为 DS 中的类声明似乎不允许构造函数参数(或相关的设置器)。
我使用工厂吗?我不确定这是否值得,因为它可能比手动使用激活器和发布服务更简单。
configuration - 用于配置服务的 OSGi 声明式服务与 ManagedService?
我最近刚刚偶然发现 OSGi 中的声明式服务可以将组件的配置设置为 required 以便组件在激活时接收它,从而消除了组件激活和配置之间的差距。我也意识到你可以通过modified
-method 接收配置更新。
在我看来,此功能与通过实现ManagedService
接口并将其作为您提供的“服务”之一发布所提供的功能非常相似。
似乎我可以完全忽略ManagedService
并只使用 DS 配置注入。
是这些技术中的一种优先于另一种,还是有其他我没有看到的权衡?
java - JAVA OSGi: InstantiationException with Declarative Services
I'm new to OSGi and am building a first DS-implementation.
Everything is coded according to "the book" but when running I get this error:
This is the configuration.xml of the module I want to use in other ones:
And this is the configuration.xml of the module which will use it:
Code for bind and unbind:
Any ideas? Thanks, Frank
java - 声明式服务可以在线程中使用吗?
我有以下代码作为 OSGi 模块。
当它运行时,我收到记录器已设置的消息:
但紧接着,run() 函数中的循环说 storeLog 是空的
有什么想法可能是错的吗?
这可能是在线程中运行的事实吗?
osgi - OSGi:在声明式服务组件激活方法中注册服务是否有效?
这是另一个问题的副本,但从另一个问题复制:
我遇到了 Felix SCR 的问题,我收到以下消息:
ServiceFactory.getService() 导致了一个循环
之所以出现这种情况,是因为在激活方法中,将其称为 ServiceAImpl(提供 ServiceA),该服务注册了另一个服务,称为 ServiceB。
我有另一个服务组件,称为 ServiceCImpl,它同时依赖于 ServiceA 和 ServiceB。通过 ServiceAImpl 注册 ServiceB,ServiceCImpl 已经满足,并且在激活 ServiceAImpl 的同一个调用中,调用了 ServiceCImpl 绑定方法。调用ServiceA的绑定方法时,检测到循环,组件初始化失败。
也许有一种方法可以让 SCR 等待绑定 ServiceCImpl 或者我需要以不同的方式注册 ServiceB?
我想没有意义的是为什么Felix SCR会在ServiceAImpl的激活方法中激活ServiceCImpl。在激活方法退出之前,我不认为 ServiceCImpl 会被认为是满意的。也许这是在使用声明式服务的同时仍然直接向框架注册服务的问题?
还没有尝试过其他 SCR 实现,比如 Equinox 的版本,但我可能会尝试看看是否有区别,但也许有人知道这是 OSGi 的东西还是 Felix 的东西?
附加信息:至于为什么 ServiceB 不是服务组件...ServiceA 实际上对另一个服务具有 0..n 的服务引用,将其称为 ServiceD。每次组件提供 ServiceD 接口时,都会使用相同的服务对象注册 ServiceB。通常同一个 ServiceD 的提供者可以提供 ServiceB,但想法是让开发人员的整体界面更加简单,这样他们就不必提供多个服务接口(此外,ServiceB 有一些属性是自动设置的,这些属性必须是手动完成,可能做错了)。
osgi - OSGi DS:为什么只记录绑定方法引发的异常?
为什么规范只记录绑定方法抛出的异常?
我希望在这种情况下该组件不会激活。
应该如何处理绑定方法抛出的异常以确保组件设置正确?
osgi - OSGi 声明式服务 - NullPointer 异常
我的声明式服务有问题。我有 2 个捆绑包,一个是服务器提供商,另一个是使用服务的用户界面。
在服务器端,实现是:
OSGi-INF 文件夹中的 XML 文件:
在客户端,实现是:
和 XML 文件:
此外,我在清单文件中包含了标签 Service-Component,并且我已经部署了处于活动状态的 equinox ds 捆绑包。
客户端是一个 GWT 用户界面,然后我将服务引用注入 GWT 的服务器端。好吧,当我在 Equinox 上部署应用程序时,它会运行,但是当我按下按钮时,我会启动一个事件来调用 ZBService。我已经调试了应用程序,错误是 zb 属性为空。也就是说,没有注入依赖。但是,这些服务在 Equinox 上公开。如果我在 Equinox 控制台上编写服务,则会部署服务。然后,我的结论是错误是由于注入没有执行。
我想知道是否有人知道是什么原因?
非常感谢提前!!
美好的一天
编辑:
我做了你的建议,但它没有运行。我更改了组件名称和 condinality/policy。结果是一样的 --> NullPointerException 由于注入没有完成。
我还调试了应用程序以查看方法绑定和/或取消绑定是否被调用,但它们不是。
完整的类是:
XML 客户端是:
部署了服务为什么不注入服务???
osgi - Osgi 声明式服务条件绑定
我有这种情况,我有三个提供相同接口的声明性服务(比如一个阅读器接口,我有 readerimpl1-database-readerimpl2-flat file-readerimpl3-memory)。我想要一个只绑定到数据库实现的消费者。在组件定义中,我们给它一个名字,所以我很确定这个名字在注册表中,所以如果我要添加一个激活方法,我可以使用这个名字从组件上下文中查找。
我想通过绑定/取消绑定来尝试它,尽管使用服务名称作为参数。我很确定可以使用组件引用元素中的“目标”参数来执行此操作,但我还没有找到如何使用它。
有没有其他人这样做过?
这类似于使用 @Reference(mapped-name="foo")