OSGi与组件管理

OSGi与组件管理,osgi,declarative-services,Osgi,Declarative Services,我有一个动态应用程序,它使用OSGi在运行时加载模块化功能。OSGi捆绑包包含模块化功能,应用程序在需要时加载捆绑包。这种方法可以正常工作,但我想要一个更细粒度的解决方案。捆绑包包含通过声明性服务控制的组件。我希望能够加载捆绑包,并且只启用捆绑包中需要的组件。我在这方面做过研究,但找不到满意的解决方案。一种方法是创建一个“网守”组件,该组件始终在包中启用,并通过ComponentContext让它调用enable和disable组件。这是一个可行的解决方案,但如果不将组件名称硬编码为“网关守护者

我有一个动态应用程序,它使用OSGi在运行时加载模块化功能。OSGi捆绑包包含模块化功能,应用程序在需要时加载捆绑包。这种方法可以正常工作,但我想要一个更细粒度的解决方案。捆绑包包含通过声明性服务控制的组件。我希望能够加载捆绑包,并且只启用捆绑包中需要的组件。我在这方面做过研究,但找不到满意的解决方案。一种方法是创建一个“网守”组件,该组件始终在包中启用,并通过ComponentContext让它调用enable和disable组件。这是一个可行的解决方案,但如果不将组件名称硬编码为“网关守护者”SCR xml描述符中的属性,我无法找到让“网关守护者”了解捆绑包中其他组件的方法

我更喜欢的是加载捆绑包的方式,并“了解”加载的捆绑包中的所有组件。能够确定组件所在的捆绑包以及它们当前处于的状态(类似于列出所有组件的equinox控制台命令“ls”)。我想在需要时启用和禁用组件

控制台如何做到这一点,我如何在应用程序中做到这一点

更新: @尼尔·巴特利特:抱歉耽搁了。我不得不换个话题。现在我回到这个问题上。如果能得到进一步的帮助,我将不胜感激。我的应用程序是基于角色的。我需要根据组件提供的功能启用它们。目标是首先禁用所有基于角色的组件。角色更改后,角色管理器将轮询每个组件以获取其提供的功能,并确定是否加载该组件。每个组件将广播它提供的功能(通过公共服务接口)。ScrService不允许我启用最初禁用的服务组件。最初启用组件并让ScrService在应用程序启动期间尽快禁用它们并不符合我的需要。

请看一看。春分和菲利克斯都有

但是,可以使组件延迟加载,即仅当其他组件/捆绑包需要时;但这可能不是你想要的。

看看。春分和菲利克斯都有


但是,可以使组件延迟加载,即仅当其他组件/捆绑包需要时;但这可能不是您想要的。

在服务描述中,将组件标记为已启用,但需要配置管理服务提供的配置信息。然后,您可以编写一个CM插件服务(不记得确切的术语)来发布和修改组件的配置。默认情况下,服务由它们的名称标识,默认情况下,名称是它们的实现类名。配置数据作为映射传递,可以为空。一旦CM提供配置,DS将使服务可用。

在您的服务描述中,将组件标记为已启用,但需要配置管理服务提供的配置信息。然后,您可以编写一个CM插件服务(不记得确切的术语)来发布和修改组件的配置。默认情况下,服务由它们的名称标识,默认情况下,名称是它们的实现类名。配置数据作为映射传递,可以为空。DS将在CM提供配置后立即提供服务。

我有一个类似的问题,但目的不同: -我有apache文件安装和配置管理服务,可以在外部用属性文件配置我的组件。 -我需要确保某些组件从外部文件获取配置,到目前为止,我找到的唯一方法是使用ConfigurationPolicy.REQUIRED标记我的组件。 -但这样我的插件项目就不会在eclipse中运行(那里没有配置文件)。 -xml还包含一个默认的开发配置,所以我可以接受,只是在configadmin提供配置数据之前,我的组件不会启动。在有人创建configadmin条目之前,我的组件一直不满意这种方式。 -我发现,如果我创建一个osgi命令行扩展器,将空配置发送到服务pid,它们将以component.xml文件中的默认值启动。 -我只是来这里想办法列出所有捆绑包

但我认为我使用的这个解决方案也可以用于您的设置,这就是我写这篇文章的原因。
只需使用ConfigurationPolicy.require标记所有组件,您就可以通过使用configadmin添加和删除配置来选择性地启动和停止它们。如果您已经将configadmin用于其他目的,这可能会很困难,但作为最后的手段,它可能是可管理的。

我有一个类似的问题,但目的不同: -我有apache文件安装和配置管理服务,可以在外部用属性文件配置我的组件。 -我需要确保某些组件从外部文件获取配置,到目前为止,我找到的唯一方法是使用ConfigurationPolicy.REQUIRED标记我的组件。 -但这样我的插件项目就不会在eclipse中运行(那里没有配置文件)。 -xml还包含一个默认的开发配置,所以我可以接受,只是在configadmin提供配置数据之前,我的组件不会启动。在有人创建configadmin条目之前,我的组件一直不满意这种方式。 -我发现,如果我创建一个osgi命令行扩展器,将空配置发送到服务pid,它们将以component.xml文件中的默认值启动。 -我只是来这里想办法列出所有捆绑包

但我认为我使用的这个解决方案也可以用于您的设置,这就是我写这篇文章的原因。 朱