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

我正在尝试做一个物联网项目,我需要在其中实施一些 OSGi 服务。问题是这些服务需要在它们之间发送信息。我已经看到这可以通过“bnd”之类的工具来实现,但目前我正在使用 Kura。所以,我想知道如何用 Kura 做到这一点。

非常感谢您的帮助。


红糖糍粑
浏览 137回答 1
1回答

喵喵时光机

我已经看到这可以通过“bnd”之类的工具来实现,但目前我正在使用 Kura。bnd 项目是一个主要在构建时使用的工具,用于帮助您为 OSGi 包组装元数据。使用 bnd 来帮助制作您的包,然后在运行时在像 Kura 这样的平台中使用它完全没有问题。我正在尝试做一个物联网项目,我需要在其中实施一些 OSGi 服务。实现 OSGi 服务的最简单方法是使用称为声明式服务的注入框架。这允许您编写一个将在 OSGi 服务注册表中注册的简单 POJO。这就像添加@Component到类一样简单:@Componentpublic 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注释以一种非常干净和简单的方式相互引用。@Componentpublic class MyComponent implements SomeService {    SomeOtherService someOtherService;    @Reference    void setSomeOtherService(SomeOtherService sos) {        someOtherService = sos;    }    @Override    public void someServiceMethod() {         someOtherService.doSomethingElse();    }}如果您能够使用 DS 1.3,那么 @Reference 注释可以直接应用于字段:@Componentpublic class MyComponent implements SomeService {    @Reference    SomeOtherService someOtherService;    @Override    public void someServiceMethod() {         someOtherService.doSomethingElse();    }}在OSGi enRoute 项目中有更多使用声明式服务和其他 OSGi 规范的例子
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java