Я использую Spring и Spring Integration в реализации сервиса, упакованной в комплект OSGi. Сервис публикуется Blueprint или, точнее, Gemini Blueprint [http://www.springframework.org/schema/osgi
]
<bean id="myService" class="org.example.mti.MyServiceImplementation"/>
<osgi:service ref="myService" interface="org.example.mti.api.MyService"/>
Файлы контекста находятся в META-INF/spring/applicationContext*.xml
Это отлично работает для некоторых сервисов-заглушек, таких как DAO с резервной памятью, которые не используют библиотеки для своей реализации. Услуги зарегистрированы и могут быть реализованы другим пакетом.
Для более сложных сервисов, где я использую Spring Integration, реализация сервиса явно нуждается в доступе к классам Spring, которые экспортируются обычными комплектами библиотек Spring.
Я использую Bundlor для управления файлом MANIFEST.MF
. Я пробовал Spring Bundlor 1.0.0.RELEASE и Eclipse Virgo Bundlor 1.1.0.M3.
Насколько я понимаю, Бандлор предназначен для того, чтобы иметь возможность сканировать файлы контекста Blueprint, чтобы определить требуемые классы, но я не вижу ничего особенно полезного в заголовке манифеста Import-Package
.
Import-Package:
org.example.dao,
org.example.domain,
org.example.mti.api,
javax.inject,
org.springframework.integration,
org.springframework.integration.annotation,
org.springframework.integration.support
При попытке запустить комплект с использованием Pax Exam, под Феликсом я вижу ClassNotFoundException
java.lang.ClassNotFoundException:
org.springframework.integration.gateway.GatewayProxyFactoryBean
Я попытался установить заголовки манифеста Bundle-Blueprint
и Spring-Context
в manifest.mf
, и они скопированы в MANIFEST.MF
, но новые значения Import-Package
не добавляются.
Ожидается ли, что добавление, например, <int:gateway .../>
в контекст проекта позволит Bundlor правильно определять зависимости времени выполнения, такие как GatewayProxyFactoryBean
выше?
Если Bundlor не может определить правильное значение Import-Package
, как вы управляете этими «внутренними» требованиями к пакету? Думаю, нецелесообразно перечислять все возможные пакеты в какой-либо сторонней библиотеке. Есть ли какой-то эквивалент Import-Library
, который я смутно помню из Spring DM?
Ссылки
http://static.springsource.org/s2-bundlor/1.0.x/user-guide/htmlsingle/user-guide.html
http://blog.springsource.org/2009/09/26/bundlor-adds-support-for-the-blueprint-service/