gpt4 book ai didi

service - OSGi 中的服务和包之间如何交换数据?

转载 作者:行者123 更新时间:2023-12-04 22:49:24 25 4
gpt4 key购买 nike

我是 OSGi 的新手。无论我阅读什么教程,我都无法找到服务和 bundle 之间的数据交换方式。我知道一个包必须在服务注册表中注册,以便其他包可以使用它们。但是我无法了解服务和 bundle 之间的数据是如何交换的。与 Web 服务一样,数据以 XML 格式或类似并使用 Http 协议(protocol)进行交换。那么数据是如何在服务和使用它的包之间交换的。它也是通过某种协议(protocol)还是如何?而且它是否涉及任何开销。请帮忙

谢谢

最佳答案

不涉及任何协议(protocol)。您执行标准的 Java 方法调用。

它的工作原理基本上是这样的:

  • 您为您的服务定义一个 Java 接口(interface)。只是一个普通的接口(interface),没有什么特别的实现。例如。

    接口(interface)时间服务 {
    公共(public)字符串 getCurrentTime();
    }
  • 你实现了接口(interface)(在一个单独的包中,你不会从你的包中导出)
  • 您在 OSGi 服务注册表中注册此接口(interface):

    timeServReg = bc.registerService(TimeService.class.getName(),
    新的 TimeServiceSimple(),
    Prop );
  • 在第二个 bundle - 想要使用它的 bundle 中,您搜索此服务:

    timeRef = bc.getServiceReference(TimeService.class.getName());
    if (timeRef != null) {
    timeService = (TimeService) bc.getService(timeRef);
    }
  • 您只需使用刚刚获得的 Java 对象即可使用该服务。
    您调用方法:

    System.out.println("当前时间为:"+ timeService.getCurrentTime());

  • 当然有很多细节和好的做法,例如使用 ServiceTracker 来查找服务等,但这是基础。

    您可以找到 many examples here.

    关于service - OSGi 中的服务和包之间如何交换数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11221351/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com