2012-08-24 19 views
4

我是OSGI框架的新手。我正在浏览这些网站并阅读有关OSGI框架的内容。坦率地说,我没有理解任何东西。以下是我的疑惑osgi相关的一些疑问

  1. OSGi应该提供模块化。我们不能通过普通罐子来实现模块化吗?
  2. 这是什么意思,OSGi有一个动态组件模型?
  3. 软件包可以安装,启动,停止,更新等。我们为什么要安装捆绑软件?为什么不能像我们访问其他普通罐子一样直接访问?

我完全困惑。有人可以回答我吗?如果可以举一些例子。

+3

我保证我没有试图变得sn,不驯,但OSGi提供的功能只有在Java最佳实践环境中才有意义。 OSGi是构建真正架构良好的Java应用程序的一种强大工具。如果没有这个目标和一系列的缺陷,模块化,组件生命周期和“JVM中的SOA”概念就没有太多可看的地方了。 – chad

+0

@chad:我认为你在那里表现得非常好 - 根本不会嗤之以鼻:) –

回答

4
  1. 编号JAR是开放的类的容器,不提供运行时封装。请参阅http://www.slideshare.net/bjhargrave/why-osgi
  2. 动态表示在VM/OSGi框架运行时可以更改bundle的生命周期。也就是说,您无需重新启动系统即可安装/启动/停止/更新/卸载软件包。
  3. 您想要做这些事情来管理捆绑的生命周期。一个人不需要动态地使用OSGi。您可以将其用于模块化和服务,而只需在开始框架之前预先安装捆绑软件。
4

我的一个模块的定义是封装(即它隐藏内部细节),其与通过合同一个(即预定义的一组可能的相互作用的)其他模块通信的单元。 JAR文件不是模块,因为它不具备这些属性。没有封装,所有内部实现细节都可以从外部看到和访问。没有合同,只需将JAR文件放在classpath中,并希望它提供您所需的功能。

动态表示可以在运行时期间安装,升级或卸载OSGi软件包(模块)。这对于升级正在运行的系统或将软件有效地部署到大型网络非常有用。

必须安装软件包,因为在使用软件之前必须安装软件。 JAR文件也必须安装!只有安装方式略有不同,即将JAR文件添加到类路径中,而使用install命令安装捆绑软件(也可以通过脚本或API调用)。 OSGi给我们更多的控制这个过程。

2

除了捆绑的方面作为真正的模块,这在所有其他的答案被处理,还有其他一些功能,使OSGi的非常强大:

  1. 服务层使您在运行时动态连线对象。与declarative services相结合,您将得到一个非常强大且灵活的编程模型,其所有好处为IOC
  2. Extender Model提供了一种更高级别的IOC,并且可以为可扩展性创造巨大的好处。