【问题标题】:OSGi DS service configuration and ServiceTrackerOSGi DS 服务配置和 ServiceTracker
【发布时间】:2016-07-03 14:44:35
【问题描述】:

假设我有一个 OSGi 服务 A,使用 DS 和元类型配置声明。

然后让我们调用 B 另一个服务,该服务正在跟踪基于属性过滤器的任何对象,它不属于 A 的配置。

在 A 中是否有可能访问服务属性并在运行时更新它们,以便 B 注意到更改?

请注意,B 跟踪的属性不是配置,而是 A 可以从自己的配置中推断出的东西,因此理想情况下,A 会在解析配置后在其 @Activate 方法中更新其服务属性。

【问题讨论】:

    标签: java osgi declarative-services


    【解决方案1】:

    如果您不关心配置语法与属性的直接耦合,那么有一个更简单的解决方案。

    只需在组件 A 的配置中设置 service 属性,它会直接反映为 B 可以过滤的服务属性。

    【讨论】:

      【解决方案2】:

      您可以在 A 的 Activate 方法中以编程方式注册服务,以便决定应添加哪些服务属性。

      【讨论】:

      • 那A不会被注册两次吗?
      • @cyberz 不,你只需要确保你的组件没有直接实现服务接口。
      • 如果你没有指定组件应该自动注册一个OSGi服务,它不会被注册两次。通常这意味着你不应该使用@Service注解。
      • @Peter Kriens 取决于使用的注释集。如果使用了 Felix SCR 注释,那么 @Service 注释会强制注释处理器在 XML 中生成服务元素。我猜 bnd 使用了规范中的注释,但我不熟悉这些。
      • 我们已经标准化了 OSGi 中的注释,它们不再是 bnd 的。由于 Felix 人(以及 Adob​​e)是这项工作的一部分,我认为 Felix SCR 注释现在或多或少已被弃用。我认为我们应该尽量使用这里的标准,以免混淆新人。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 2012-10-01
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      相关资源
      最近更新 更多