OSGi服务类依赖项

时间:2013-03-17 10:48:15

标签: java osgi apache-felix

我想知道什么是组织我的捆绑包的好方法,以便可以在它们之间共享作为服务参数所需的类。

我有几个服务接口,它们暴露了需要在Bundes之间引用的类类型,例如:

public interface DoesThis {
   public CustomClassB doSomething(CustomClassA customClassA);
}

根据我的理解CustomClassA(如果在与暴露服务相同的包中定义)将不可用于其他包,那么最好在包中的包之间公开类引用然后导出吗? / p>

正如一个子问题:服务和包装出口是否应该携手合作......如果是这种情况,从我正在阅读的文件中不清楚?

谢谢

1 个答案:

答案 0 :(得分:1)

基本上,是的。接口引用的所有类型都必须位于导出的包中。有几个选择:

  • 它们可以与接口位于同一个包中,在这种情况下,它们自然会与接口同时导出,因为在OSGi中我们总是导出/导入整个包。
  • 它们可以位于不同的包中,但可以通过与服务接口相同的包导出。
  • 它们可以位于不同的包中,并通过不同的包进行导出。在这种情况下,服务接口包必须导入该包。

如果您考虑一下,对于不要导出的类型没有意义。例如,如果消费者无法创建要传入的doSomething类型的对象,或者如果它无法理解返回类型CustomClassA,那么消费者如何调用您的CustomClassB方法?

关于您的子问题...是的,包导出主要用于支持服务注册表。服务只有在提供者和消费者能够就服务的“合同”达成协议时才能工作,这在Java术语中意味着它们加载了相同的接口。