Java и OSGI

Стандартната Java платформа съдържа в себе голям списък от библиотеки за разработване на едно приложение. Едни от най – популярните библиотеки са:

  • Collections API
  • JDBC
  • Swing/AWT
  • I/O API
  • STaX

Често обаче се случва, че предоставените възможности не са достатъчно и се налага да се използват допълнителните библиотеки, които не са част от платформата.  В такъв случай тези външни библиотеки трябва да се добавят в CLASSPATH на Java платформата. CLASSPATH е начин да се каже на едно (Java) приложение къде да потърси за допълни библиотеки (jars). Такова описване на зависимости създава следните проблеми:

  • нужните библиотеки са описани на ниво файлова система
    • нужен е пълен или абсолютен път до файла
  • няма ясно описание кои библиотеки са нужни
    • ако библиотеките не са добавени в CLASSPATH то при стартиране на приложението ще се получи ClassNotFoundException. Намирането на всички нужни библиотеки може да е дълъг и тежък процес и изисква предварително да се знаят имената им.
  • няма възможност за определяне на специфична версия на библиотеката
    • дори имената на библиотеките да са предварително известни е нужно също да се знае версията на библиотеката, с която приложението работи. В противен случай може да се използва несъвместима версия на библиотеката

Java като платформа се използва за разработване на широк спектър от приложения – от малки мобилни приложения до сигурни сървърни приложения, способни да обработват милиони заявки в секунда. В същото време тя има описаните по – горе ограничения, които влияят на възможностите за модуларизация на едно приложение. Предоставените възможности за модуларизация са:

  • интерфейси
  • пакети

За да се постигне пълна модуларизация повечето компании или разработчици създават свои библиотеки и/или подходи. Такива техники са:

  • правила за логическата структура на приложението
  • различни трикове с classloaders
  • сериализация на обектите за комуникация

Често обаче тези техники губят стойността си ако не се изпълняват стриктно и създават повече допълнителна работа отколкото помагат.

Възможностите, които липсват от Java платформата за да поддържа модуляризация са:

  • модификатори на ниво jar
  • възможност един jar да изброи своите зависимости
  • няма версии

OSGI поддържа тези възможности като стъпва върху основата, която Java предлага и разширява възможностите й.

Публикувано в ModularJava. Постоянна връзка.