我在打包为 OSGi 包的服务实现中使用 Spring 和 Spring Integration。该服务由 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 库包导出。
我正在使用 Bundler 来管理MANIFEST.MF
文件。我试过 Spring Bundlor 1.0.0.RELEASE 和 Eclipse Virgo Bundlor 1.1.0.M3。
我的理解是,Bundlor 旨在能够扫描蓝图上下文文件以确定所需的类,但我没有看到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 运行捆绑包时,在 Felix 下,我看到 ClassNotFoundException
java.lang.ClassNotFoundException:
org.springframework.integration.gateway.GatewayProxyFactoryBean
我尝试在 中设置Bundle-Blueprint
和Spring-Context
manifest 标头manifest.mf
,并将它们复制到MANIFEST.MF
,但没有Import-Package
添加新值。
是否期望在蓝图上下文中添加例如 an<int:gateway .../>
将允许 Bundler 正确确定运行时依赖项,例如GatewayProxyFactoryBean
上面的?
如果 Bundler 无法确定正确的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 -为蓝图服务/