Я разрабатываю приложение на основе OSGi. Записывая себя в отношении особенностей среды OSGi, я наткнулся на концепцию расширения . Ссылаясь на спецификацию R4 (OSGi R4):Условное расширение связки в OSGi framework
пучки расширения могут доставить дополнительные части реализации Рамки или предоставить функциональные возможности, которые должны находиться на пути класса загрузки . Эти пакеты не могут быть предоставлены нормальными механизмами импорта/экспорта . Необходимы расширения пути класса загрузки , потому что некоторые реализации пакетов предполагают, что они находятся в пути класса загрузки или должны быть доступны для всех клиентов. пример расширения пути загрузки класса является реализация java.sql, такие как JSR 169
Вероятно, это просто мне глупо, но у меня возникают трудности на понимание концепции. У меня есть несколько вопросов:
Из того, что я понял, что это, кажется, что расширение связка делает же работу
org.osgi.framework.system.packages.extra
иorg.osgi.framework.bootdelegation
(т.е.com.sun.*
илиsun.*
) в. Я прав? Если нет, каковы различия между ними?Можете ли вы показать мне реальный сценарий использования для расширений? Что-то, что говорит: «вы не можете этого сделать, если не используете расширения!» Here кто-то уже пытался представить пример для пакетов расширения, но (по крайней мере, для меня), кажется, можно добиться такого же результата путем настройки
org.osgi.framework.system.packages.extra
иorg.osgi.framework.bootdelegation
;
Я знаю, что есть уже this SO answer, но для меня это не полностью попал в точку.
Спасибо за все ответы!
Что? Это так мощно? Можете ли вы показать мне пример кода? И, по * любому классу *, действительно ли он включает также класс внутри частной реализации пакета? Даже одиночные пучки? – Koldar
@ Koldar. Сначала путь выбора класса загрузки всегда выбирается первым. Единственный способ переопределить что-то уже в пути класса загрузки - добавить его как расширение. –
ничего себе кажется действительно мощным! Но разве это не нарушает модульность? Можно подумать, что реализации не могут быть доступны каким-либо образом, но с помощью расширений, которые можно «высунуть нос» в подробности реализации! (BTW, пожалуйста, добавьте пример кода в свой ответ, и я с радостью приму ваш ответ) – Koldar