2016-10-05 7 views
2

Я разрабатываю приложение на основе OSGi. Записывая себя в отношении особенностей среды OSGi, я наткнулся на концепцию расширения . Ссылаясь на спецификацию R4 (OSGi R4):Условное расширение связки в OSGi framework

пучки расширения могут доставить дополнительные части реализации Рамки или предоставить функциональные возможности, которые должны находиться на пути класса загрузки . Эти пакеты не могут быть предоставлены нормальными механизмами импорта/экспорта . Необходимы расширения пути класса загрузки , потому что некоторые реализации пакетов предполагают, что они находятся в пути класса загрузки или должны быть доступны для всех клиентов. пример расширения пути загрузки класса является реализация java.sql, такие как JSR 169

Вероятно, это просто мне глупо, но у меня возникают трудности на понимание концепции. У меня есть несколько вопросов:

  1. Из того, что я понял, что это, кажется, что расширение связка делает же работу org.osgi.framework.system.packages.extra и org.osgi.framework.bootdelegation (т.е. com.sun.* или sun.*) в. Я прав? Если нет, каковы различия между ними?

  2. Можете ли вы показать мне реальный сценарий использования для расширений? Что-то, что говорит: «вы не можете этого сделать, если не используете расширения!» Here кто-то уже пытался представить пример для пакетов расширения, но (по крайней мере, для меня), кажется, можно добиться такого же результата путем настройки org.osgi.framework.system.packages.extra и org.osgi.framework.bootdelegation;

Я знаю, что есть уже this SO answer, но для меня это не полностью попал в точку.

Спасибо за все ответы!

ответ

1

Расширения связки могут использоваться для переопределения классов, даже классов java.lang.

Вы можете проследить, когда System.gc() вызывается, например, (например, написать трассировки стека в лог-файл)

+0

Что? Это так мощно? Можете ли вы показать мне пример кода? И, по * любому классу *, действительно ли он включает также класс внутри частной реализации пакета? Даже одиночные пучки? – Koldar

+1

@ Koldar. Сначала путь выбора класса загрузки всегда выбирается первым. Единственный способ переопределить что-то уже в пути класса загрузки - добавить его как расширение. –

+0

ничего себе кажется действительно мощным! Но разве это не нарушает модульность? Можно подумать, что реализации не могут быть доступны каким-либо образом, но с помощью расширений, которые можно «высунуть нос» в подробности реализации! (BTW, пожалуйста, добавьте пример кода в свой ответ, и я с радостью приму ваш ответ) – Koldar