《OSGi官方文档》使用OSGi的好处
开发者:
对于今天的大型分布式系统OSGi提供了一个和小型、嵌入式应用一样的模块化的架构来减少系统复杂性。从内部和现成的模块来构建系统可以显著的减少开发和维护的成本。OSGi编程模型就是实现组件为基础的系统。
业务:
OSGi的模块化和动态模块降低在网络工作环境下的多设备集成的操作成本,减少应用的开发、维护和远程服务管理的成本。OSGi 如此成功的关键原因在于它提供了一个非常成熟的组件系统,他可以工作在数量惊人的环境中。OSGi 的组件系统实际已经被用来构建像IDEs(Eclipse)、应用服务器(GlassFish, IBM Websphere, Oracle/BEA Weblogic, Jonas, JBoss)、应用框架(Spring, Guice)、工业自动化、家庭网关、手机等高复杂应用。
所以,OSGi的组件系统究竟能给你带来什么好处呢?
1、减少复杂性
利用OSGi技术进行开发意味着软件包的开发:OSGI组件、软件包和模块。它们隐藏它们的内部实现,通过已经定义好的服务来和其他包进行通信,隐藏内部实现意味这以后可以自由更改实现。这样不仅减少了bug的数量,而且使得包的开发更为简单,因为可以只需要实现已经定义好的一定数量的功能接口即可。
2、复用
OSGi的组件模块使得它在应用中可以非常简单的使用其他第三方组件。已经有很多的开源项目都是通过OSGi来发布他们的jar包,而且商业库也开始使用现成的包。
3、现实情况
OSGi是一个动态框架。他可以更新正在运行的模块和服务。那些曾经的java开发者认为这个特性是有问题的,而且并没有看到这个特性的好处。然而,事实表明,真实的世界是高动态化的,并且有很多错综的服务以完美的匹配真实世界的场景。例如,在网络环境中模拟一个设备的服务,如果该设备被发现,服务就去注册,如果设备掉线,服务就取消注册。现实世界中有很多场景都和动态服务模型相匹配。应用因此在他们所属的领域里可以强有力的复用注册中心(注册,获取,具有展现力的过滤语言列表,等待服务的出现或消失)。这不仅可以保存正在实现的代码,而且还对全局提供了可见性、调试工具和更多的功能而不是需要实现过时的问题,在这样的动态环境下写代码听起来似乎是个噩梦,但是幸运的是,它有主要的支持类和框架,如果不是这样,那将非常痛苦。
4、开发简单
OSGi 技术并不是组件化的一个标准,它也指定了组件是如果安装和管理的,这个API已经被很多挺管理代理的模块所使用。这种管理代理可以和命令行已经简单,例如TR-6g管理协议驱动,OMA DM协议驱动,Amazon EC2的计算接口、IBM Tivoli 的管理系统等。标准化管理API很容易在现有和未来的系统中集成OSGi技术。
5、动态更新
OSGi 组件模块是一个动态的模块,模块可以在不需要停止整个系统的情况下被安装、启动、停止、更新和卸载。许多的Java 开发者不相信它的这种做法是可靠的,因此自觉的在生产环境下不这样使用。然而,使用这种方法一段时间后,许多人开始意识到它确实可以工作和减少部署的重要性。
6、自适应
OSGi的组件模型设计原则是允许组件的混合和匹配。这需要指定组件的依赖性,也需要组件在一个并不总是可用的可选的依赖环境中。OSGi的服务注册是一个可以注册、获取和侦听服务的动态注册的软件包。这种动态服务模块允许软件包找出系统上可用的功能,并调整它们能提供的功能,这些可以使得代码更为灵活和更好的适应变化。
7、透明性
软件包和服务在OSGi环境中是最高级的。管理API不但提供了对软件包内部状态的访问而且也也提供了如何去和其他包做对接。例如,大多数框架提供了一个命令行的窗口来展示内部状态;也有部分应用为了调试一个确切的问题而被停止,或者引入软件诊断包。OSGi 的应用可以在一个命令行窗口下进行调试,而不用盯着百万行的日志输出和很长的重启时间。
8、版本控制
OSGi技术解决了JAR的痛苦。JAR 包带来的问题是,A库依赖的版本=2的B库,但是C库又依赖版本=3的B库,在标准的java中,你是非常不幸的。在OSGi的环境中,所有的软件包都被非常仔细的设定版本,只有这些包在相同的类空间下它们才会被连接在一起协同工作。这种方式就允许软件包A和软件包C都和它们各自的库一起工作.虽然不建议在这种版本的问题下来设计系统,但是在某些情况下它依然是非常有用的。
9、简单
使用OSGi是非常的简单的,它不但依赖管理、配置和动态性都非常强大,而且OSGi的代码也和传统的Java代码完全相似。有很多简单的注解可以让程序在用运行期间知道一个特殊的类是如何使用动态性、配置和对其他服务的依赖。默认情况向是完全因此了动态性和OSGi的其他的特性,简单的模块会逐步使用一些高级特性。
10、体积小
第4版OSGi框架的jar文件大约只有300KB的大小。只包含OSGi 就实现了很多功能的应用来说已经非常的小了.OSGi 可以运行在很多种类的设备上:从很小、小设备再到大型机器,它仅仅需要一个最低配的Java虚拟机来运行。
11、快速
OSGi的一个主要功能就是从软件包里加载类。在传统的java程序中,jar包是清晰可见的,并线性的排列。搜索一个类需要遍历整个列表(通常时间会很久)。相比之下,OSGi软件包之间的预依赖可以准确的知道是哪个软件包提供的类,通过减少搜索是启动速度提高的一个重要因素。
12、懒加载
懒加载是软件中一个很好的点,OSGi技术有很多的机制来保证只有当类真正需要的时候才开始加载他们。例如,软件包以饿汉的方式启动,但是当其他的包在使用它们的时候它们也能以配置的方式启动。当服务被使用的时候它们才会被注册。为了允许各种懒加载的场景,以使得它们可以节省运行时的巨大成本,OSGi的规范已经被优化过很多次了。
13、安全
Java的底层有一个非常强大的细粒度的安全模型,但是它在实践中却非常难配置,结果就是大多数安全的java应用都以二进制的选项运行:其丧失安全性或者安全性能有限。OSGi的安全模型利用细粒度的安全模型,但是通过它提高了可用性
通过软件包的开发人员以一种简单的审计方式来指定安全请求的细节,同时环境的操作者也对其完全负责来提高其可用性(以及加强原始模型)。
14、非独占性
许多应用框架运行时需要独占整个VM,且每个虚拟机上仅仅允许允许一个应用的实例。这时就体现出了OSGi规范的灵活性,它甚至可以在J2EE的应用服务器中运行。很多开发者都想运行OSGi,但是他们的公司并不允许他们部署通常的JAR包。因此,这些开发者可以将某个OSGi框架包括在WAR文件中,并将软件包从文件系统或通过网络装载到应用服务器中来运行。OSGi非常的灵活,这使得一个应用服务器上就可以容易地作为多个OSGi框架的宿主。
15、非侵入
在一个OSGi的环境中,不同软件包均有自己的环境设置,不同应用实际是都可以使用虚拟机提供的所有设施,OSGi对此并无任何限制。OSGi的最佳实践就是编写POJO(Plain Old Java Objects),并且由于这个原因,OSGi服务并不需要任何特殊的接口,甚至一个Java的String对象也可以充当一个OSGi服务。这个策略使得应用程序的代码可以更容易地移植到其他环境。
16、可以四处运行
当然,这里有所依赖。Java的最初目的是能够四处运行。显然,由于不同环境中的Java虚拟机(Java VM)实现存在差异,在任何地方都能运行所有的代码并不可能。例如,手机中的虚拟机就不太可能与IBM大型机中运行的银行应用支持相同的类库(libraries)。要具备四处运行的能力,必须考虑两个问题。一是OSGi API应该使用能在所有环境中都有效的类;二是如果bundle包含了在某个执行环境中无效的代码,那么这个bundle就不能在该环境中启动。在OSGi规范中,这两个问题都得到了解决。
17、广泛使用
虽然最初起始于嵌入式家用自动化市场,但从1998年起,OSGi规范已被扩展并应用于多个业务领域:汽车、移动技术、工业自动化、网关/路由、专用小交换机、固定电话等等。从2003年起,广泛流行的Eclipse统一开发环境开始采用OSGi技术运行,并提供扩展,以支持bundle开发。最近几年,企业开发者也开始采用OSGi规范。不仅Eclipse的开发者发现了OSGi技术的威力,并且由于Spring Framework为OSGi创造了一种特殊的扩展,使得这种技术进一步得到广泛流行。现在,你可以在IBM Websphere、SpringSource dm Server、Oracle(以前的BEA) Weblogic、Sun的GlashFish和Redhat的JBoss中都能找到OSGi技术的踪影。
18、核心公司支持
在OSGi的成员中,集中了大量不同领域的大型计算机公司,包括Oracle、IBM、Samsung、Nokia、Progress、Motorola、NTT、Siemens、Hitachi、Deutsche Telekom、Redhat和Ericsson等
OSGi 规范开始于1988年,它开始被寄予家庭自动化的市场,尝试解决怎样构建独立应用之外的组件。在过去的十年中,软件由于开源项目的爆发而发生了巨大的变化。十年以前,一个应用是由许多写代码的人在一起开发的。而今天,大多数的软件是有大量的开源构建组成的,而它们有尝尝是一些不在一起工作的人设计的,这和OSGi所有解决的问题有点相像。许多开源工程更关注实际中的问题,减少对底层软件的问题的担忧,也为了使它在其他工程使用更简单,因此它们也采用了OSGi的规范,而且这是大势所趋。
如果你是在Java开发软件,OSGi技术应该是一个合乎逻辑的下一步,因为它解决了许多你可能不知道可以解决的问题。 OSGi技术的优势如此之多,如果你使用Java,那么OSGi 应该在你的工具箱中。
原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《OSGi官方文档》使用OSGi的好处
暂无评论