我正在尝试做一个物联网项目,我需要实现一些OSGi服务。问题在于这些服务需要在它们之间发送信息。我已经知道可以使用“ bnd”之类的工具来完成此操作,但是目前我正在与Kura合作。所以,我想知道用库拉做这件事的方法。
非常感谢您的帮助。
答案 0 :(得分:0)
我已经知道可以使用“ bnd”之类的工具来完成此操作,但目前我正在使用Kura。
bnd项目是一个主要在构建时使用的工具,可帮助您组装OSGi捆绑软件的元数据。使用bnd帮助制作捆绑包,然后在运行时在Kura这样的平台中使用它完全没有问题。
我正在尝试做一个物联网项目,我需要实现一些OSGi服务。
实现OSGi服务的最简单方法是使用称为声明性服务的注入框架。这使您可以编写一个简单的POJO,该POJO将在OSGi服务注册表中注册。这就像将@Component
添加到类中一样简单:
@Component
public class MyComponent implements SomeService {
@Override
public void someServiceMethod() { }
}
上述组件将实现接口,因此将自动注册为SomeService
。 Kura平台包括一个声明性服务实现,因此您无需安装其他任何东西。但是,您应该对照Kura支持的版本检查所使用的注释的版本(Kura的3.x使用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规范的示例。