Кура Как общаться между пучками?
Я пытаюсь сделать проект IoT, где мне нужно реализовать некоторые сервисы OSGi. Проблема заключается в том, что эти службы должны передавать информацию между ними. Я видел, что это возможно делать с некоторыми инструментами, такими как "bnd", но в настоящее время я работаю с Kura. Итак, я хотел бы знать, как это можно сделать с Курой.
Большое спасибо за Вашу помощь.
1 ответ
Я видел, что это возможно делать с некоторыми инструментами, такими как "bnd", но в настоящее время я работаю с Kura.
Проект bnd - это инструмент, который в основном используется во время сборки, чтобы помочь вам собрать метаданные для вашего пакета OSGi. Нет никаких проблем с использованием bnd, чтобы помочь сделать ваш пакет, а затем использовать его на платформе, такой как Kura, во время выполнения.
Я пытаюсь сделать проект IoT, где мне нужно реализовать некоторые сервисы OSGi.
Самым простым способом реализации службы OSGi является использование инфраструктуры внедрения, которая называется Декларативные службы. Это позволяет вам написать простой POJO, который будет зарегистрирован в реестре сервисов OSGi. Это так же просто, как добавление @Component
к классу:
@Component
public class MyComponent implements SomeService {
@Override
public void someServiceMethod() { }
}
Вышеуказанный компонент будет автоматически зарегистрирован как SomeService
потому что он реализует интерфейс. Платформа Kura включает в себя реализацию декларативных сервисов, поэтому вам больше не нужно ничего устанавливать. Однако вам следует проверить версию аннотаций, которые вы используете, относительно версии, поддерживаемой Kura (3.x в Kura использует DS 1.2, 4.x использует DS 1.3).
Проблема заключается в том, что эти службы должны передавать информацию между ними.
Сервисы OSGi, реализованные с использованием DS, могут ссылаться друг на друга очень простым и понятным способом, используя @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 в проекте OSGi enRoute.