是否需要导出包含OSGI服务的软件包才能发布到服务注册表?或者发布到服务注册表是否满足了导出包的需要?
答案 0 :(得分:3)
答案简短;第一个问题=否,第二个问题=否,那里没有"解决方法"
"按合同设计"发挥作用。基本上,我们为消费者提供了依赖于供应商和供应商实现的接口 - 这使我们的消费者代码与实现者的实现细节分离。有关概述和http://www.osgi.org/blog/2011/08/package-as-contract.html的详细信息,请参见http://en.wikipedia.org/wiki/Design_by_contract。
鉴于接口(我们希望使用的API)和实现(API接口的具体实现)和使用者(希望使用接口实现的代码),使用OSGi,您有许多选择。
数字2的优点包括允许多个提供者(OSGi使用可用于指定已注册服务和属性的元数据匹配的LDAP过滤器),并利用OSGi的动态绑定特性(即您可以更改实现提供者)在运行时)。
要记住的一点是,使用者和提供者必须使用包版本和导出包所定义的相同类(换句话说,加载API类的包类加载器必须对于使用者和提供者)。
答案 1 :(得分:1)
服务的类型应该在导出的包中。键入服务并基于模块层的类型共享构建。因此,您需要确保服务的提供者和服务的使用者都可以共享相同的类型。因此,某些bundle必须导出包含该类型的包,以便提供者和使用者可以导入包。这允许框架验证服务的类型安全性。