为了账号安全,请及时绑定邮箱和手机立即绑定

Kura 如何在 bundle 之间进行通信?

Kura 如何在 bundle 之间进行通信?

红糖糍粑 2021-10-13 15:57:56
我正在尝试做一个物联网项目,我需要在其中实施一些 OSGi 服务。问题是这些服务需要在它们之间发送信息。我已经看到这可以通过“bnd”之类的工具来实现,但目前我正在使用 Kura。所以,我想知道如何用 Kura 做到这一点。非常感谢您的帮助。
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我已经看到这可以通过“bnd”之类的工具来实现,但目前我正在使用 Kura。


bnd 项目是一个主要在构建时使用的工具,用于帮助您为 OSGi 包组装元数据。使用 bnd 来帮助制作您的包,然后在运行时在像 Kura 这样的平台中使用它完全没有问题。


我正在尝试做一个物联网项目,我需要在其中实施一些 OSGi 服务。


实现 OSGi 服务的最简单方法是使用称为声明式服务的注入框架。这允许您编写一个将在 OSGi 服务注册表中注册的简单 POJO。这就像添加@Component到类一样简单:


@Component

public class MyComponent implements SomeService {


    @Override

    public void someServiceMethod() { }


}

上面的组件会自动注册为a,SomeService因为它实现了接口。Kura 平台包含声明式服务实现,因此您无需安装任何其他内容。但是,您应该根据 Kura 支持的版本(3.x 的 Kura 使用 DS 1.2,4.x 使用 DS 1.3)检查您使用的注释的版本。


问题是这些服务需要在它们之间发送信息。


使用 DS 实现的 OSGi 服务能够使用@Reference注释以一种非常干净和简单的方式相互引用。


@Component

public class MyComponent implements SomeService {


    SomeOtherService someOtherService;


    @Reference

    void setSomeOtherService(SomeOtherService sos) {

        someOtherService = sos;

    }


    @Override

    public void someServiceMethod() { 

        someOtherService.doSomethingElse();

    }

}

如果您能够使用 DS 1.3,那么 @Reference 注释可以直接应用于字段:


@Component

public class MyComponent implements SomeService {


    @Reference

    SomeOtherService someOtherService;


    @Override

    public void someServiceMethod() { 

        someOtherService.doSomethingElse();

    }

}

在OSGi enRoute 项目中有更多使用声明式服务和其他 OSGi 规范的例子


查看完整回答
反对 回复 2021-10-13
  • 1 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信