Рубрики
Без рубрики

Понимание платформы Java OSGI

что такое фреймворк OSGI и как он работал. С тегами osgi, java, автономный.

OSGI – это платформа, используемая при создании сложных приложений Java, содержащих несколько компонентов. С помощью OSGI вы можете создавать Java-приложения, которые могут загружаться динамически. При создании базового приложения Java вы можете создать файл jar для каждого модуля и загрузить его с помощью пути к классу. Но с помощью платформы OSGI вы можете динамически загружать файл jar OSGI в любое время, когда вам это необходимо. Давайте обсудим некоторые термины и понятия, которые вы должны знать о платформе OSGI:

Пакет

Пакет – это модуль OSGI, содержащий всю вашу логику. Пакет – это файл jar, содержащий вашу бизнес-логику, предоставляющую некоторые услуги. Помимо обычного файла jar, он также содержит информацию о том, как он должен работать во время выполнения OSGI в файле MANIFEST.MF. Эти сведения включают имя пакета, версию, экспортированные и импортированные библиотеки. Ниже приведен пример определения определения пакета OSGI:

 Bundle-Name: Hello World
 Bundle-SymbolicName: org.dhanushka.helloworld
 Bundle-Description: A Hello World bundle
 Bundle-ManifestVersion: 2
 Bundle-Version: 1.0.0
 Bundle-Activator: org.dhanushka.Activator
 Export-Package: org.dhanushka.helloworld;version="1.0.0"
 Import-Package: org.osgi.framework;version="1.3.0"
  • Имя пакета используется для идентификации пакета. Это всего лишь необязательное строковое значение.
  • Bundle-символьное имя является уникальным идентификатором пакета. Это соответствует общему стандарту именования пакетов java.
  • Bundle-Описание – это описание того, что делает этот пакет.
  • Bundle-Manifestversion – это управление версиями, используемое платформой OSGI для чтения манифеста пакета.
  • Bundle-Версия – это номер версии, который вы выделили для пакета OSGI.
  • Bundle-Активатор является отправной точкой вашего модуля. У вас может быть несколько реализаций классов. OSGI использует это свойство, чтобы отметить, какой класс использовался в качестве начальной точки пакета. Об активаторе пакетов мы поговорим подробнее позже.
  • Export-Package – это набор пакетов, которые вам необходимо предоставить другим пакетам OSGI. Если вы не указали пакеты экспорта, то другие пакеты OSGI не смогут получить доступ к классам в вашем пакете OSGI.
  • Import-Package – это набор пакетов, необходимых для вашего пакета OSGI. Вы должны импортировать пакеты здесь, если вам нужно сослаться на какие-либо другие пакеты OSGI.

Пакет – это просто модуль, содержащий всю вашу логику программирования. Вы можете импортировать в него другую функциональность пакета и предоставить свою собственную функциональность другим пакетам.

Услуги

Сервисы – это способ соединения каждого из пакетов вместе. Как я уже объяснял, несколько пакетов могут быть соединены вместе для предоставления какой-либо услуги. Проверьте следующий пример реализации пакета, в котором есть метод активации:

public class Activator implements BundleActivator {
    private BundleContext context;

    @Override
    public void start(BundleContext context) throws Exception {
        System.out.println("Starting");
        this.context = context;
    }

    @Override
    public void stop(BundleContext context) throws Exception {
        System.out.println("Stopping");
        this.context = null;
    }
}

В этом исходном коде активатором пакета является класс Активатор . Когда OSGI запускается, он начинает выполнять метод start . Это очень похоже на метод main . Когда платформа OSGI останавливается, она запускает метод stop . Всякий раз, когда вы добавляете этот пакет в среду выполнения OSGI, он начнет выполнение с вызова метода start и завершит его выполнение вызовом метода stop . Как вы можете видеть, этот пакет не имеет никакой зависимости от других пакетов OSGI. Он может начать свое выполнение самостоятельно. В некоторых сценариях может потребоваться запустить этот пакет при выполнении некоторых условий. Пока условие не будет выполнено, среда выполнения OSGI не вызовет метод start . Это может быть достигнуто с помощью ссылок. Ссылки позволяют вам вызывать метод start после выполнения заданных условий. Проверьте следующее изменение, внесенное в класс Активатор :

public class Activator implements BundleActivator {
    private BundleContext context;

    @Override
    public void start(BundleContext context) throws Exception {
        System.out.println("Starting");
        this.context = context;
    }
        @Reference(
            name = "activator.service",
            service = ActivatorService.class,
            cardinality = ReferenceCardinality.MANDATORY,
            policy = ReferencePolicy.DYNAMIC,
            unbind = "unsetActivatorService")
    protected void setActivatorService(ActivatorService activatorService) {
            // Set values
     }

    protected void unsetActivatorService(ActivatorService activatorService) {
            // Unset values
    }

    @Override
    public void stop(BundleContext context) throws Exception {
        System.out.println("Stopping");
        this.context = null;
    }
}

В этом коде, кроме предыдущего метода start и stop , есть еще два метода. @Ссылка аннотация, используемая здесь для обозначения этих зависимостей. Здесь мы дали название услуги и класс обслуживания. В справочной аннотации мы определили количество элементов как обязательное. Поскольку количество элементов помечено как обязательное, для запуска запуска функции, набор услуг активатора должен быть удовлетворен. Если количество элементов является необязательным, то не обязательно вызывать установите службу активатора , чтобы запустить этот пакет. Этот метод может быть запущен из другого пакета. Ниже приведен пример кода, как запустить установить службу активатора метод.

context.getBundleContext().registerService(ActivatorService.class.getName(), activatorService, null);

Здесь Служба активатора – это объект, содержащий сведения, которые необходимо отправить в установить службу Активатора . Как только этот метод будет вызван, пакет OSGI запустит Служба активатора запуск метод.

Вы можете создавать более продвинутые приложения с помощью платформы OSGI. Вы создаете динамически подключаемые компоненты с помощью шаблона проектирования внедрения зависимостей.

Оригинал: “https://dev.to/dhanushkadev/undestanding-java-osgi-framework-j8d”