问题标签 [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.

0 投票
2 回答
1530 浏览

communication - 你如何在 Eclipse 声明式服务和视图(ContentProviders)之间进行通信

假设您有一个带有各种视图的 Eclipse 插件,这些视图应该显示来自将数据推送到视图的某些 OSGi 包的数据。我不是让每个视图都与 OSGi 包通信,而是有一个中间 Facade 类,它充当视图的黑板并管理视图与其他 OSGi 包之间的通信——嗯,这就是理论。

问题的出现是因为 ui 包(带有视图和外观)使用声明式服务与另一个包(称为 DataStore)进行通信。由于 Data Store 从另一个源接收异步数据更新,因此它需要将内容推送到 Facade(以及其他捆绑包,如果它们可用)。OSGi 实例化 Facade 以满足对 DataStore 的 DS 配置的基数要求,但视图由 Plugin 的 IApplication 实现实例化。即使 IApplication 和 Facade 是同一个类,我也会得到两个彼此不认识的独立实例。

如何启用这些组件(插件应用程序、视图等和 OSGi 实例化外观)之间的通信?

0 投票
2 回答
4110 浏览

java - 在服务启动时禁用 OSGi 服务的正确方法是什么?

我创建了一个带有公开(声明性)服务的 OSGi 包。如果我在调用 activate 时注意到有什么不对劲以至于我无法提供服务,我需要防止它被暴露。目前激活函数如下所示:

另一种选择是像这样包装/传播异常(或抛出一个新异常,取决于):

我在OSGi 服务平台服务纲要中的声明性服务部分中找不到指定的正确行为,但我可能遗漏了一些东西

0 投票
2 回答
2226 浏览

java - 如何构建具有依赖关系的 OSGi 服务并通过 DS 发布

我的示例课程:

计划是在几个包中重用 SingleModelProvider 类,以提供 ModelProvider 的不同实现。我需要在每个包中完成的是使用构造函数的适当参数简单地实例化 SingleModelProvider。使用任何 DI 框架的非常简单的场景。如果可能,我想使用 DS(声明式服务)注册 ModelProvider 服务,而不必在 Activator 中编写样板代码。

这可能吗?

我似乎找不到任何有关如何完成此操作的文档,因为 DS 中的类声明似乎不允许构造函数参数(或相关的设置器)。

我使用工厂吗?我不确定这是否值得,因为它可能比手动使用激活器和发布服务更简单。

0 投票
2 回答
3317 浏览

configuration - 用于配置服务的 OSGi 声明式服务与 ManagedService?

我最近刚刚偶然发现 OSGi 中的声明式服务可以将组件的配置设置为 required 以便组件在激活时接收它,从而消除了组件激活和配置之间的差距。我也意识到你可以通过modified-method 接收配置更新。

在我看来,此功能与通过实现ManagedService接口并将其作为您提供的“服务”之一发布所提供的功能非常相似。

似乎我可以完全忽略ManagedService并只使用 DS 配置注入。

是这些技术中的一种优先于另一种,还是有其他我没有看到的权衡?

0 投票
4 回答
1859 浏览

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

0 投票
2 回答
239 浏览

java - 声明式服务可以在线程中使用吗?

我有以下代码作为 OSGi 模块。

当它运行时,我收到记录器已设置的消息:

但紧接着,run() 函数中的循环说 storeLog 是空的

有什么想法可能是错的吗?

这可能是在线程中运行的事实吗?

0 投票
2 回答
1673 浏览

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 有一些属性是自动设置的,这些属性必须是手动完成,可能做错了)。

0 投票
1 回答
750 浏览

osgi - OSGi DS:为什么只记录绑定方法引发的异常?

为什么规范只记录绑定方法抛出的异常?

我希望在这种情况下该组件不会激活。

应该如何处理绑定方法抛出的异常以确保组件设置正确?

0 投票
2 回答
2324 浏览

osgi - OSGi 声明式服务 - NullPointer 异常

我的声明式服务有问题。我有 2 个捆绑包,一个是服务器提供商,另一个是使用服务的用户界面。

在服务器端,实现是:

OSGi-INF 文件夹中的 XML 文件:

在客户端,实现是:

和 XML 文件:

此外,我在清单文件中包含了标签 Service-Component,并且我已经部署了处于活动状态的 equinox ds 捆绑包。

客户端是一个 GWT 用户界面,然后我将服务引用注入 GWT 的服务器端。好吧,当我在 Equinox 上部署应用程序时,它会运行,但是当我按下按钮时,我会启动一个事件来调用 ZBService。我已经调试了应用程序,错误是 zb 属性为空。也就是说,没有注入依赖。但是,这些服务在 Equinox 上公开。如果我在 Equinox 控制台上编写服务,则会部署服务。然后,我的结论是错误是由于注入没有执行。

我想知道是否有人知道是什么原因?

非常感谢提前!!

美好的一天

编辑:

我做了你的建议,但它没有运行。我更改了组件名称和 condinality/policy。结果是一样的 --> NullPointerException 由于注入没有完成。

我还调试了应用程序以查看方法绑定和/或取消绑定是否被调用,但它们不是。

完整的类是:

XML 客户端是:

部署了服务为什么不注入服务???

0 投票
1 回答
3183 浏览

osgi - Osgi 声明式服务条件绑定

我有这种情况,我有三个提供相同接口的声明性服务(比如一个阅读器接口,我有 readerimpl1-database-readerimpl2-flat file-readerimpl3-memory)。我想要一个只绑定到数据库实现的消费者。在组件定义中,我们给它一个名字,所以我很确定这个名字在注册表中,所以如果我要添加一个激活方法,我可以使用这个名字从组件上下文中查找。

我想通过绑定/取消绑定来尝试它,尽管使用服务名称作为参数。我很确定可以使用组件引用元素中的“目标”参数来执行此操作,但我还没有找到如何使用它。

有没有其他人这样做过?

这类似于使用 @Reference(mapped-name="foo")