Java OSGi解决了什么问题?
我在维基百科和其他网站上读到过关于这个问题的文章,但我并不真正了解全局。它说它是一个基于组件的平台,您可以在运行时重新加载模块。此外,到处给出的“实际示例”是Eclipse插件框架 我的问题是:Java OSGi解决了什么问题?,java,components,osgi,Java,Components,Osgi,我在维基百科和其他网站上读到过关于这个问题的文章,但我并不真正了解全局。它说它是一个基于组件的平台,您可以在运行时重新加载模块。此外,到处给出的“实际示例”是Eclipse插件框架 我的问题是: OSGi的清晰而简单的定义是什么 它解决了哪些常见问题 我所说的“常见问题”是指我们每天都要面对的问题,比如“OSGi能做些什么使我们的工作更高效/有趣/简单?”为了清晰起见进行了编辑。OSGi页面给出了比我更好的简单答案 一个简单的答案是:OSGi服务平台为协作网络服务提供了一个标准化的、面向组件的计
OSGi能解决常见问题吗?我不确定。我的意思是,它可以,但是对于更简单的问题,开销可能不值得。但是当你开始处理更大的、网络化的应用程序时,这是一个值得考虑的问题。 < p>我从OSGi中发现了以下优点:
- 每个插件都是一个版本化的工件,它有自己的类加载器
- 每个插件都依赖于它包含的特定JAR和其他特定版本的插件
- 由于版本控制和独立的类加载器,可以同时加载同一工件的不同版本。如果应用程序的一个组件依赖于插件的一个版本,而另一个组件依赖于另一个版本,则可以同时加载这两个组件
这样,您就可以将应用程序构造为一组按需加载的版本化插件工件。每个插件都是一个独立的组件。正如Maven帮助您构建可重复的、由一组特定版本的构件定义的构建一样,OSGi帮助您在运行时完成这项工作 我不太关心OSGi模块的热插拔能力(至少目前是这样)。更多的是强制模块化。在任何时候,在类路径上都没有数百万个“公共”类可以很好地防止循环依赖:你必须真正考虑你的公共接口——不仅仅是java语言构造的“公共”,而是你的库/模块:组件(确切地说)是什么,您希望为其他人提供的信息?实现您的功能真正需要(其他模块的)接口是什么
这很好,热插拔随它而来,但我宁愿重新启动我的常用应用程序,而不是测试所有的热插拔能力组合 它还被用于在移动端增加中间件和应用程序的可移植性。例如,WinMo、Symbian和Android都可以使用移动端。一旦与设备功能集成,可能会变得支离破碎。
- 类似地说,你可以在不关掉汽车的情况下更换汽车的发动机
- 您可以为客户定制复杂的系统。看看日食的力量吧
- 您可以重用整个组件。比仅仅是物体要好
- 您可以使用一个稳定的平台来开发基于组件的应用程序。这样做的好处是巨大的
- 您可以使用黑盒概念构建组件。其他组件不需要知道隐藏的接口,它们只看到发布的接口
- 您可以在同一系统中使用多个相同的组件,但在不同的版本中使用,而不会影响应用程序。OSGi解决了Jar地狱问题
- 有了OSGi,您就可以用它来构建系统了
对于每个使用Java的人来说,都有很多好处(我现在就提醒了他们)。至少,OSGi让你想到了模块化、代码重用、版本控制以及项目的总体管道设计。一些让我对OSGi着迷的事情: 1) 实现和它们的上下文加载器有很多怪癖,可以是异步的(我们在confluence内部使用felix)。与纯spring(无DM)相比,[main]几乎可以运行所有同步功能 2) 热负荷后,等级不相等。例如,您在hibernate上有一个tangosol缓存层。它由Fork.class填充,在OSGi范围之外。您热加载了一个新的jar,而Fork并没有改变。类[叉]!=类[叉]。出于相同的根本原因,它也会在序列化过程中出现 3) 集群 您可以解决这些问题,但这是一个很大的难题,并使您的体系结构看起来有缺陷 对于那些为热插拔做广告的人。。OSGi的第一个客户?日食。Eclipse在加载包后做什么 它会重新启动。OSGi的组件系统为您提供了哪些好处
好吧,这里有一个很好的列表: 降低复杂性-使用OSGi技术开发意味着