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