Blueprint имеет ограниченное использование для этого, так как Blueprint по определению декларативный, и вы хотите сделать что-то программно. Тем не менее, Blueprint может помочь вам в этом, добавив контекст пакета . Если у вас есть контекст пакета, вы можете использовать org.osgi.framework
API , чтобы получить все пакеты (context.getBundles()
), запросить их состояние, запустить и остановить их и так далее.
Ваше требование 3) загрузка пакета не имеет смысла в контексте OSGi, поскольку их жизненный цикл заключается в том, что они устанавливаются и затем запускаются. Если пакет не был установлен, он не будет включен в getBundles (), но его можно установить с помощью контекста.
Чтобы добавить контекст в bean-компонент Blueprint, используйте специальное свойство:
<bean class="SomeClass">
<property name="context" ref="blueprintBundleContext"/>
</bean>
Я позаимствовал этот пример у Enterprise OSGi в действии , но на developerWorks есть очень хорошее руководство по Blueprint: http://www.ibm.com/developerworks/opensource/library/os-osgiblueprint/
Недавно был задан похожий вопрос, который также может оказаться полезным: Как мне внедрить консоль OSGi в комплект? (ss
похож на bundle:list
, хотя и не предоставить любую информацию, относящуюся к Blueprint).