Java и OSGI

Упражнението има за цел да покаже различните видове зависимости между bundle-и и как може да се постигне различна функционалност само чрез промяна на конфигурация на приложението.

  1. Създайте нов bundle с име CommandsAPI
    1. От менюто File изберете New->Project…
    2. От появилият се прозорец изберете Plug-In Project и натиснете Next
    3. За Project Name въведете CommandsAPI
    4. Уверете се, че за Target Platform е избрано an OSGI framework
    5. Натиснете Next
    6. От следващата страница изключете Generate an activator, a Java class that controls the plug-in’s life cycle и натиснете Next
    7. От следващата страница изключете Create a plug-in using one of the templates
    8. Натиснете Finish
  2. В новосъздадения bundle (CommandsAPI) направете нов пакет с име org.elsys.modular.command
    1. Натиснете десния бутон на мишката върху src директорията от проекта и изберете New->Package
  3. В новосъздадения пакет (org.elsys.modular.command) създайте нов интерфейс с име Command
    1. Натиснете десния бутон на мишката върху org.elsys.modular.command пакета и изберете New->Interface
  4. Добавете метод – void execute(); – в интерфейса
    1. package org.elsys.modular.command;
      
      public interface Command {
      
       void execute();
      }
  5. Създайте нов bundle с име HelloWorldCommand (стъпки 1А – 1H)
  6. В новосъздадения bundle (HelloWorldCommand) направете нов пакет с име org.elsys.modular.hello
  7. В новосъздадения пакет (org.elsys.modular.hello) създайте нов клас с име HelloWorldCommand
    1. Натиснете десния бутон на мишката върху org.elsys.modular.hello пакета и изберете New->Class
    2. В отворилия се прозорец въведете HelloWorldCommand за име на класа и се уверете, че създаването на public static void main(String[] args) е изключено
  8. Направете HelloWorldCommand да имплементира Command
    1. package org.elsys.modular.hello;
      
      public class HelloWorldCommand implements Command {
      
      }
  9. Следната грешка трябва да се появи – Command cannot be resolved to a type. Bunlde HelloWorldCommand използва интерфейс дефиниран в CommandsAPI. Тази зависимост може да бъде решена по следния начин:
    1. Bundle CommandsAPI трябва да export-не пакетите, съдържащи интерфейсите, които се използват от други bundle-и. В случая org.elsys.modular.command
    2. Bundle HelloWorldCommand трябва да import-не този пакет за да достъпи интерфейса дефиниран в него. Освен import-package зависимости могат да бъдат решени и с require-bundle – по този начин обаче се специфицира точно определен bundle като зависимост. При import-package се специфицира пакет, а bundle-ът, който го предоставя не е строго определен.
Публикувано в ModularJava. Постоянна връзка.