Кура Как общаться между связками? - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь сделать проект IoT, в котором мне нужно реализовать некоторые сервисы OSGi.Проблема заключается в том, что эти службы должны передавать информацию между ними.Я видел, что это возможно делать с некоторыми инструментами, такими как «bnd», но в настоящее время я работаю с Kura.Итак, я хотел бы знать, как это можно сделать с Курой.

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 27 сентября 2018

Я видел, что это возможно сделать с некоторыми инструментами, такими как "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

...