代码之家  ›  专栏  ›  技术社区  ›  Maik

动态创建和配置具有依赖关系的OSGi服务

  •  1
  • Maik  · 技术社区  · 14 年前

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

    更新

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

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

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

    public interface NotificationService {
        void notify(Notification n);
    }
    

    这适用于简单的数据类型,但元类型规范不处理与其他服务的依赖关系。E、 让我们说一个 Notification 有文件附件,因此Twitter服务需要一个FileUpload服务来存储文件。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Tassos Bassoukos    14 年前

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

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

        2
  •  0
  •   Marcel Offermans    14 年前

    解决问题的方法是使用apachefelix依赖关系管理器。它有一个声明性的javaapi,允许您在运行时添加和删除依赖项。您可以在这里找到一些基本的示例: http://felix.apache.org/site/apache-felix-dependency-manager-getting-started.html 我建议您从源代码构建一个3.0.0快照,因为这是最新和最棒的,目前相当稳定。

    如果有帮助的话,我可以为您上面描述的示例提供实际的示例代码。告诉我。