一些与osgi有关的疑问

时间:2012-08-24 17:10:04

标签: eclipse-plugin osgi

我是OSGI框架的新手。我正在浏览网站并阅读有关OSGI框架的内容。坦率地说,我没有理解任何事情。以下是我的疑惑

  1. OSGi应该提供模块化。我们不能通过普通的罐子实现模块化吗?
  2. OSGi有一个动态组件模型是什么意思?
  3. 可以安装,启动,停止,更新捆绑包等。我们为什么要安装捆绑包?为什么我们不能像我们访问其他普通罐子一样直接访问?
  4. 我完全糊涂了。有人能回答我吗?如果可以给出一些例子。

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

我对模块的定义是一个封装单元(即隐藏内部细节),它通过契约与其他模块通信(即一组预定义的可能交互)。 JAR文件不是模块,因为它既不显示这些属性。没有封装,所有内部实现细节都是可见的,可从外部访问。没有契约,你只需将JAR文件放在类路径上,并希望它提供你想要的功能。

动态意味着可以在运行时中安装,升级或卸载 OSGi捆绑包(模块)。这对于升级正在运行的系统或在大型网络中有效部署软件非常有用。

必须安装软件包,因为在使用软件之前必须始终安装软件。还必须安装JAR文件!只有安装方式略有不同,即JAR文件被添加到类路径中,而捆绑包是使用install命令安装的(这也可以是脚本或从API调用)。 OSGi使我们能够更好地控制这一过程。

答案 2 :(得分:3)

我试图在OSGi博客中回答你的第一个问题:http://blog.osgi.org/2013/08/dear-prudence-cant-we-achieve.html

下周,将回答下一个。

答案 3 :(得分:2)

除了Bundles作为真正模块的方面,已经在所有其他答案中处理过,还有一些其他功能使OSGi非常强大:

  1. 服务层可让您在运行时动态连接对象。结合declarative services,您将获得一个非常强大且灵活的编程模型,其中包含IOC的所有好处。
  2. Extender Model在更高层次上提供了一种IOC,可以为可扩展性带来巨大的好处。

答案 4 :(得分:1)

阅读有关OSGi规范的实现可能是有利的。

如果你使用过Eclipse,那么你已经体验过OSGi的一些优点,甚至可能都不知道它。

以下是对Equinox的基本知识的精彩描述。

http://www.vogella.com/articles/OSGi/article.html