`
snoopy7713
  • 浏览: 1151873 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

OSGi到底给我们带来了什么[附PPT和Demo]

    博客分类:
  • OSGi
阅读更多

OSGi到底给我们带来了什么[附PPT和Demo]

2011-01-10 14:23 by 道法自然, 1906 visits, 收藏 , 编辑

算算时间,接触OSGi已有2年半时间了,我一直在探索OSGi给我们 带来的变化,同时我们也在实施OSGi。回想起来,我对OSGi也算是一见钟情。在接触OSGi的这2年半时间里,我翻译了OSGi规范,并设计了面 向.NET的OSGi.NET规范,然后我们用了1年半的时间来实现OSGi.NET产品。之后,我们便开始体验OSGi到底给我们带来了什么。

 

从2005年开始,我一直在探索一种自组合的插件化框架,从而来构建一个UIShell平台。“UIShell”是我们的梦想,我们希望构建一个 SaaS应用商店,从而改变人们开发、购买、使用、销售软件的方式。这个梦想现在已经初步实现了,我们已经构建了第一个融合开发商、消费者和运营商的 SaaS应用商店平台。这个平台的构建完全是基于OSGi思想之上的。它实现了这样的一个功能:开发者通过SDK可以开发基于AppStoreSDK的应 用,AppStoreSDK是基于OSGi.NET来构建的;消费者通过SaaS应用商店平台来购买SaaS应用,然后下载或者在线使用应用,所有的应用 都是运行在AppStoreRuntime之上的,AppStoreRuntime是应用的虚拟运行时,基于OSGi.NET来构建。下图是这个平台的软 件体系结构。接下来我来介绍一下我们在OSGi.NET体验。

image

 

1 什么是OSGi

简而言之,OSGi是一个动态模块化框架的规范,提供了插件化、面向服务和插件扩展三大功能。这个规范体现非常重要的2点:“模块化”和“动态”。

(1)模块化

在OSGi规范中的模块是一种规范化的完全物理隔离的模块。每一个模块拥有独立的文件结构、独立的类型空间、独立的资源等,模块是重用的单元,不可再切割。模块间互不干扰和影响。

(2)动态

OSGi的动态体现在“面向服务架构支持”、“可扩展”和“生命周期”之上。

在OSGi中,模块是一个完全物理隔离的单元,模块间的通讯是基于面向服务架构思想来实现的。在这里,服务=接口 + 实现。此外,OSGi提供了一个服务注册表,模块可以向服务注册表注册其提供的服务,并且可以从服务注册表动态的查询和绑定服务。由于服务是动态可替换 的,我们无法确认我们需要的服务由谁来提供、什么时候提供、什么时候被替换成另一个服务实现。

OSGi构建的模块是完全可重用的模块,如果我们要更新模块的功能,我们有一种选择,那就是使用其提供的模块扩展功能。OSGi的模块扩展是基于 ExtensionPoint-Extension方式来实现扩展,提供扩展功能的模块定义一个ExtensionPoint,而实现扩展的模块则定义一 个Extension。当实现扩展的模块被启动或停止时,它会向提供扩展的模块注册扩展或者卸载扩展。

每一个模块具有一个确定的生命周期状态,OSGi中有四个持久状态和两个瞬时状态。持久状态分别为Installed、Resolved、 Active和Uninstalled,瞬时状态分别为Starting和Stopping。内核暴露了生命周期状态操作接口,从而,我们可以通过更改模 块的生命周期状态来改变其提供的功能。

此外,OSGi体现了一种更为灵活的软件体系结构,我把它归纳为“横向切割 + 纵向分层”。在下图中,一个应用系统由Movies模块和Logs功能组成,每一个功能都需要获取用户输入、验证、业务操作和数据访问。在这,应用系 统=Movies功能 + Logs功能 + 其它功能,即应用系统是功能的横向组成;然而,功能 = 获取用户输入代码 + 验证代码 + …,即每一个功能是代码的纵向组织而成的。一个应用系统中,功能间的交互一般很少,而功能内部的实现则非常的耦合。OSGi更是体现了这种行为,基于 OSGi,每一个应用系统按照功能被横向切割成不同模块,而每一个模块又根据不同的复杂度进行纵向分层架构,这种思想与软件工程的“高内聚、低耦合”非常 的吻合。因此,我非常喜欢OSGi提倡的软件体系结构。

image

目前,OSGi已经被以下公司应用在不同的软件系统。

ØIBM的Eclipse、WebSphere

ØOracle的Weblogic

ØParamus的Infiniflow Service Fabric

ØProSyst的ModuleFusion

ØRed Hat的JBoss

ØSpringSource的SpringSource应用平台

ØSun Microsystem的GlassFish企业服务器

ØBWM车载系统

Ø尤埃SaaS引擎云计算PaaS平台

 

2 OSGi解决了什么问题

在我看来,OSGi着重解决了以下三个问题:重用性、软件复杂度和可维护性。

(1)可重用性

重用已经是个老话题了,然而重用实施并没有那么简单,原因有:没有统一标准、需要合理的设计与科学的方法、习惯于代码级的低层次重用等。在OSGi 里面,重用的粒度为模块。每一个物理隔离的模块为重用的基本单元,其重用的方法可以为:(1)在一个OSGi内核中安装一个模块从而来重用该模块的功能; (2)建立一个模块仓库,实现仓库级重用;(3)直接将一个模块拷贝过来。标准的重用方式,不需要修改任何的代码,不对其它模块产生任何的影响。

(2)软件复杂度

一个复杂的软件系统一般都需要一个架构完整的团队来实施,这样的系统也更需要一个灵活的软件体系架构。我经常听到用户给我的抱怨说,他们的应用系统 构建和维护都非常的痛苦。目前RUP、MOF的提出都是要从一定程度上解决软件复杂度问题。我曾在Sybase工作,我们公司也构建了一个框架来保证复杂 系统的构建。一个复杂软件系统通常需要几个部分配合来实施。没有一个灵活、符合团队配合的架构,想要实施这种应用系统,其复杂度是可以想象的。OSGi提 供了一个模块化组合的思想,由架构师团队对整个系统进行模块化拆分,每一个模块再由不同的团队来实施,这样能够确保团队间不会太多的影响与干扰,也同时降 低了模块实施的复杂度。

(3)可维护性

软件维护是一件非常痛苦的事情,通常在修改一个Bug或者添加一个新的功能时,我们都可能会引入新的Bug,这是因为软件内部的依赖比较复杂,从而 “牵一发,动全身”。在维护过程中,我们最担心的就是引入Regression,Regression就是“回退”,即我们修改Bug时让以前可以工作的 功能不能够再工作了。OSGi通过模块化分割、面向服务通讯方式来降低模块间的依赖与影响,也使得模块维护负担减轻,从而能够改善我们维护的负担。另外, 软件升级也是一个问题,没有一个良好的模块化组织,我们并不能通过局部更新来更少的影响整个软件系统。

我们在维护的过程中,也常碰到另一个问题,就是经常需要到客户所在地进行维护。OSGi能够支持动态部署,我们可以远程的动态增加与禁止某项功能、更新某个模块,甚至建立一个统一更新的模块仓库,这样我们不再需要到客户那里实施更新,减少我们的成本。

附件是我上个周末实施的一次关于OSGi.NET的培训和示例,大家可以看一下,以后多多交流。

/Files/baihmpgy/体验OSGi.NET.pdf

/Files/baihmpgy/MovieStore.zip

要运行示例,你需要下载UIOSP安装包,尤埃开放服务平台试用版下载

 

转自:道法自然

http://www.cnblogs.com/baihmpgy/archive/2011/01/10/1931945.html

分享到:
评论

相关推荐

    osgi简介PPt(自制)

    OSGI(Open Service Gateway Initiative)是一个开放的中间件平台,旨在为各种嵌入式设备提供通用的软件运行环境,能够消除设备操作系统和硬件之间的差异。这个平台的核心是它的模块化系统,允许应用程序和服务动态...

    OSGI的PPT教程

    OSGI的PPT教程,写得很不错,重点都在里面,如果把这个PPT搞懂了,那OSGI基本也全会了。

    乱凑的一个osgi的demo

    标题中的“乱凑的一个osgi的demo”表明这是一个关于OSGi(Open Service Gateway Initiative)的示例项目,可能是一个简单的实现或演示了OSGi框架的基本功能。OSGi是一种Java模块化系统,它允许动态地发现、加载和...

    osgi数据库连接demo

    在这个“osgi数据库连接demo”中,我们将探讨如何在OSGi环境中配置C3P0作为Oracle数据库连接池,并集成iBATIS作为数据访问层。 首先,C3P0是一个开源的JDBC连接池,它提供了一些额外的功能,如自动管理数据库连接、...

    osgi自定义控制台命令demo

    本示例“osgi自定义控制台命令demo”将向我们展示如何创建和实现自己的控制台命令,以增强OSGi的交互性。 首先,理解OSGi中的bundle至关重要。Bundle是OSGi的核心构建块,类似于Java中的jar文件,但包含了元数据,...

    介绍OSGI的PPT

    NULL 博文链接:https://chinasxhz.iteye.com/blog/256689

    osgi-ds对应的demo

    在标题“osgi-ds对应的demo”中,我们可以推测这是一个关于OSGi Declarative Services的示例项目。这个项目可能包含了两个部分:“1..1”和“1..n”,这可能代表了两种不同的服务关系或服务配置模式。"1..1"可能表示...

    OSGI入门资料(非常beautiful的ppt)

    很基础全面的OSGI ppt教程,讲解的很详细。

    osgi基础demo-搭建servlet

    在这个“osgi基础demo-搭建servlet”项目中,我们将探讨如何在OSGi环境中创建并运行一个简单的Servlet应用程序。 首先,我们需要理解OSGi的核心概念。OSGi基于服务导向架构,每个模块称为一个Bundle,每个Bundle...

    基于OSGi和Spring开发Web应用的Demo

    在IT行业中,构建高效、可扩展的Web应用程序是至关重要的,而OSGi(Open Services Gateway Initiative)和Spring框架的结合提供了这样的解决方案。本篇将详细探讨如何基于OSGi和Spring来开发Web应用,并通过提供的...

    osgi基础demo

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> ; charset=UTF-8"> <title>a test page <body>Hello, This is a test page! </html>

    Introduce.OSGi.ppt

    【OSGi介绍.ppt】 OSGi,全称为Open Services Gateway Initiative,中文译为开放服务网关倡议,是一种针对Java平台的动态模块系统。OSGi旨在解决软件开发中的复杂性问题,提供了一种模块化、可扩展且动态化的系统...

    OSGi.in.action.ppt

    在"OSGi in Action"的PPT中,内容主要围绕如何利用OSGi与流行框架集成、将现有系统迁移到OSGi,以及OSGi应用的设计和开发最佳实践。 1. 使用OSGi与流行框架集成: - Hibernate:演示了如何在OSGi环境中使用...

    OSGI原理与最佳实践(附简下载)

    《OSGi原理与最佳实践》这本书是学习OSGI的好资料,它深入浅出地介绍了OSGI的核心概念和实际应用,对于理解OSGI的工作原理和掌握其最佳实践非常有帮助。此外,可以通过访问博客链接...

    osgi解决不同版本jar包冲突的demo

    OSGi(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许在单个JVM上运行多个版本的相同库或服务,从而解决了不同版本jar包冲突的问题。本示例通过一个名为“myself”的工程,展示了如何...

    osgi spring实例

    OSGi(Open Services Gateway Initiative)和Spring是两个在Java开发中广泛应用的技术框架。OSGi是一种模块化系统,它允许开发者创建可热插拔的模块,称为"bundles",以实现更灵活、可维护的软件架构。Spring则是一...

    osgi,林昊写的osgi实战和进阶

    OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为一系列可独立部署、更新和交互的服务。林昊所著的《OSGI实战》与《OSGI进阶》是深入理解OSGI技术的重要参考资料,适合...

Global site tag (gtag.js) - Google Analytics