Java 使用依赖项动态创建和配置OSGi服务

Java 使用依赖项动态创建和配置OSGi服务,java,osgi,Java,Osgi,在我当前的应用程序中,我希望在运行时通过用户界面创建和配置osgi服务。我研究了OSGi元类型规范,但它只支持简单的类型属性 所以我的问题是:为什么不支持其他osgi服务之类的属性类型,有没有一个很好的理由?有没有人知道已经存在的这样一个项目 更新 为了进一步澄清我的问题: 我想做的是根据软件用户的需要创建和配置新的服务。如果向系统中添加了新的服务接口,这甚至应该起作用 假设我有一个用于发送通知的服务接口 public interface NotificationService { vo

在我当前的应用程序中,我希望在运行时通过用户界面创建和配置osgi服务。我研究了OSGi元类型规范,但它只支持简单的类型属性

所以我的问题是:为什么不支持其他osgi服务之类的属性类型,有没有一个很好的理由?有没有人知道已经存在的这样一个项目

更新

为了进一步澄清我的问题:

我想做的是根据软件用户的需要创建和配置新的服务。如果向系统中添加了新的服务接口,这甚至应该起作用

假设我有一个用于发送通知的服务接口

public interface NotificationService {
    void notify(Notification n);
}
以及用于向Twitter等发送通知的实现。通过元类型规范,我可以对twitter服务需要用户名和密码的信息进行编码。这允许我在运行时动态创建一个UI,用于创建新的twitter通知服务


这适用于简单的数据类型,但元类型规范不处理与其他服务的依赖关系。例如,假设
通知具有文件附件,因此Twitter服务需要文件上传服务来存储文件

您始终可以使用BundleContext#registerService()注入新服务,但此时服务必须已初始化并准备好运行。您可能会发现OSGi4.2规范的新Blueprint服务很有用,甚至可以使用更老但更广泛的动态服务


最后,这取决于你想做什么。当您在运行时说“创建”和“配置”osgi服务时,您的意思是什么

因此,在您的示例中,您基本上是说可以配置服务的实现,并且该配置可能表示该实现需要另一个服务。基本上,您正在寻找一个允许您在代码中声明实现的依赖项的系统,而不是在静态XML文件中声明实现的依赖项(就像声明性服务和大多数其他服务一样)

您的问题的解决方案是使用ApacheFelix依赖关系管理器。它有一个声明性JavaAPI,允许您在运行时添加和删除依赖项。可以在这里找到一些入门的基本示例:我建议您从源代码构建一个3.0.0-SNAPSHOT,因为这是最新和最好的快照,到目前为止相当稳定


如果有帮助,我可以为上面描述的示例提供实际的示例代码。让我知道。

我试图通过一个例子来澄清我的问题。我希望这有助于理解我想做什么。我得到了这个例子。元类型服务不能帮助您,我认为它与您设想的用例不匹配。您可以做的是使用一个简单的字符串值属性,该属性带有可用的特定文件上载服务的选项(当然,这会硬编码服务之间的依赖关系-如果使用新的文件上载服务添加捆绑包会发生什么情况?),然后使用ServiceTracker使用自定义属性过滤器获取服务。我认为使用您自己的元数据描述系统(使用注释!)将更适合您。甚至Eclipse注册表。只是想知道这是否回答了crazymaik最初的问题。