`

osgi的企业级开发的一些经验

    博客分类:
  • java
阅读更多

 

前面看了论坛里面关于osgi的一些讨论。讨论挺火热的,发表一下自己的见解。

 

 

笔者从08年开始使用osgi。早期在终端开发,(原公司网址hotye.com)。使用osgi对各个硬件模块、业务模块、服务模块进行分离。

 

osgi终端应用 

在终端项目的开发。osgi是绝对占优势的。

 

如:

使用 模拟的密码键盘.jar 这个bundle,在运行时即可进行系统调试。

 

 

 

osgi后台系统

09年初开始应用在后台系统。将不同业务拆分、不同通信模块拆分。

 

接受广东省500台终端发送过来的请求。现日均处理请求量30w以上。

 

在多业务的平台上,使用osgi是有优势的。

 

后来离开公司通过blog也了解到,在某些外部公共的jar在多classloader下会出现一些问题。需要自行解决。

 

在后台业务系统应用osgi。可能出现的问题出在第三方jar的class无法替代osgi同名的class,这需要自行去处理。

 

 

 

淘宝的osgi

 

淘宝网内部分布式调用框架hsf 4.0从jboss微内核转到osgi平台。

 

其架构师毕玄与另外一同事出书《OSGi原理与最佳实践》,电子版本infoq有得下载,不过电子版本我看了一下是应用为主。想深入理解的还是看看osgi的中文文档好点。下载地址见附件。

 

 

 

结语

国内使用osgi的公司可能远远超过我们的预期。

 

套用林昊的话:OSGi规范对于模块的物理隔离、模块的交互、多版本这些方面都有了非常完善的机制,并且也得到了现在几乎所有的App Server厂商或开源社区的认可

 

而是否使用osgi,是否模块化、模块动态化?

 

没有使用过的没有理由一定要使用。

 

对于使用惯了的会认为没有模块化、模块动态化的系统很不方便。

 

 

 

osgi规范中

一些可能有用的记录

 

MANIFEST.MF:

 

Bundle-UpdateLocation: http://www.acme.com/Firewall/bundle.jar

描述bundle的更新地址。如果bundle需要更新,则使用这个地址进行更新。

 

Import-Package: org.osgi.util.tracker,org.osgi.service.io;version=1.4

声明bundle导入的包。参考导入包一节。

 

DynamicImport-Package: com.acme.plugin.*

包含了一个逗号分隔的动态导入包清单。参考动态导入包。

 

Export-Package: org.osgi.util.tracker;version=1.3

描述导出包声明。参考导出包。

 

 

 

 

最常见的版本兼容原则如下:

  • 主版本号(major):不兼容的更新

  • 副版本号(minor):向后兼容的更新

  • 小版本号(micro):不影响接口的更新。例如,修正了一个错误。

 

 

osgi原理:

 

每一个bundle只会有一个单独的类加载器,类加载器形成了一个类加载的代理网络结构

 

 

类加载器可以加载类和资源,加载途径有:

  • 启动类路径:启动类路径中有一个java.*的包以及它实现的包。

  • 框架类路径:在框架中通常有一个单独的类加载器,加载框架实现的类和关键的服务接口类。

  • Bundle类空间:bundle的类空间由和bundle相关的JAR文件组成,以及其他和bundle紧密相关的JAR文件,比如bundle片断(参考bundle片断一节)

类空间是指一个给定的bundle类加载器可以访问到的所有的类。因此,一个指定bundle的类空间来自:

  • 父类加载器(通常是来自启动类路径的java.*包中的)

  • 导入的包

  • 必须的bundle

  • Bundle类路径(私有包)

  • 附加的片断

类空间必须是一致的,也就是说不能存在相同全名的两个类(为了防止类声明错误)。但是,在OSGi框架中,不同的类空间可以存在同名的类。在模块层,支持不同版本的类加载到相同的虚拟机中。

 

osgi中类加载机制:

 

类加载器必须通过利用在解析过程中建立的连接(wire)来找到适当的exporter

如果一个类没有在导入包中找到,那么根据在附加的manifest中的定义在附加的空间进行查找。

 

全部java.*开头的都会在启动类加载器中加载,其他必须通过启动类加载器加载的包可以通过在系统属性中指定:

org.osgi.framework.bootdelegation = package-name,package-name*

 

类查找流程:


 

 

 

生命周期//todo

服务层//todo

 

 

 

  • 大小: 59.4 KB
分享到:
评论
13 楼 ch21 2010-05-20  
本正在用osgi作应用系统,举步维艰呀!
12 楼 fireflyc 2010-03-22  
使用OSGI就意味着你不能用直接用hibernate,不能直接用commons组件,甚至log4j,成千上万个open source的java library。。。老天啊,要死了。。。。
11 楼 yonlist 2010-03-22  
最近正在研究,打算在新项目上使用,谢谢分享宝贵的资料
10 楼 jape198654 2010-02-08  
jasonw 写道
其实。。。osgi解决了任何实际问题吗?

这个也一直都有争论。

有多少项目真的要用到hot swap jars...

其实等java从Languange level support component后(据说马上的事情了), osgi就丧失了存在的意义。。。

这不好定论吧?一样东西的特性是你所需要的,那它一定可以解决你所谓的实际问题。如果你没一样是需要的话,那再完美的东西也会感觉一文不值。
9 楼 jape198654 2010-02-08  
使用OSGI并不是所有特性都需要用上。
我们现正在使用的后台交易系统中,使用了其bundle的独立性,保证了系统对某些业务bundle的随时去除和替换的低风险。
在各个bundle的升级中,无需停止正在运行的系统,可轻易进行refresh升级,保证了其他业务不受升级的业务影响,且在白天也可对我们的系统进行升级。
为了使用一样东西而去使用,和令一样东西为我们服务,这是不同角度的想法。
8 楼 pufan 2010-02-08  
jasonw 写道
其实。。。osgi解决了任何实际问题吗?

这个也一直都有争论。

有多少项目真的要用到hot swap jars...

其实等java从Languange level support component后(据说马上的事情了), osgi就丧失了存在的意义。。。


其实。。。java解决了任何实际问题吗?

这个也一直都有争论。

有多少项目真的要用到write once run anywhere...

其实等.net从System level support language后(据说马上的事情了), java就丧失了存在的意义。。。
7 楼 linliangyi2007 2010-02-08  
同楼上几位大侠所闻,一年前开始折腾OSGi,但是发现在公司应用中很难有发挥的余地,就又荒废了。
6 楼 jasonw 2010-02-08  
其实。。。osgi解决了任何实际问题吗?

这个也一直都有争论。

有多少项目真的要用到hot swap jars...

其实等java从Languange level support component后(据说马上的事情了), osgi就丧失了存在的意义。。。
5 楼 YiSingQ 2010-02-07  
对于传统的基于SSH或者是JDBC/JSP的J2EE应用应用系统使用osgi开发,真的是还没见到。所以现在虽然网上关于osgi的资料有,但是还是很难能够看出它能够为我们的Web系统的设计、开发、维护、拓展带来哪些好的东西!
4 楼 yongyuan.jiang 2010-02-06  
呵呵。同样一份文档,放在09总结就没人下载,放在这一天就51个下载了。

呵呵。真的是价值存在于地位啊~~~~
3 楼 yongyuan.jiang 2010-02-06  
多版本的特性在企业应用还是很可用的。如
交易系统服务1.0
交易系统服务1.5
这样,两个服务就可以并存,并且新系统直接引用1.5的服务。除问题了还可以无缝回到1.0系统。
2 楼 skydream 2010-02-05  
    我感觉osgi是一种致力于解决“复杂”问题的方案,对于复杂度不高的场合,完全没有必要为osgi而osgi。

    而且osgi前期复杂度比较高,入门门槛高,以传统的开发方式和思维都有巨大差异,普及难度远比ssh高的多。
1 楼 xyz20003 2010-02-05  
多谢提供这么好的资料。

从楼主的描述可以看出,使用OSGi实现的应用里完全没有传统J2EE项目的影子,终端开发,多业务平台,分布式调用框架。等等。

为什么没有做应用系统的同志采用OSGi呢?说白了还不是因为技术难度高,系统也没有必要分模块,需求不稳定,没有成熟的基础开发平台。

最后的结论应该很明显,做业务系统有没有采用OSGi划分模块的必要呢?想快速就采用jdbc+jsp或者ssh之类的组合不就行了,要是需求变动就用人顶。

反过来OSGi实际上能给项目带来什么好处?分模块,接口设计?这些都是技术上的,说得难听点儿就是在玩技术,如果业务上确实没有模块动态加载的需求,何必去趟这片浑水呢?

最后还是多嘴提个疑问:“OSGi有没有可能搞出一个像ssh之类的快速开发框架呢?让不了解OSGi的开发人员也能够在此平台上进行开发,调试,测试,部署等工作。”

相关推荐

    基于OSGi和Spring开发企业级Web应用

    基于OSGi和Spring开发企业级Web应 目前OSGi和Spring已经受到了广泛的关注,如果我们将OSGi和Spring结合,更能充分发挥二者各自的特长,同时更好地满足企业级应用开发的需求。

    基于OSGi和Spring开发Web应用.doc

    基于OSGi和Spring开发Web应用

    企业级快速开发平台JXADF.zip

    基于OSGi的企业级快速开发平台——JXADF 1、基于OSGi、J2EE 2、插件集市(http://osgi.jxtech.net)中有丰富的插件。 3、前端代码(界面、CSS、JS、图片等)、后端代码(JAVA业务逻辑、SQL脚本【只需要提供一种...

    OSGi开发文档及开发心的

    结合OSGi规范,对OSGi技术原理阐述,及OSGi技术实践的心得体会

    《深入理解OSGi:Equinox原理、应用与最佳实践》

    第三部分基于Equinox的OSGi应用与实践,详细介绍了OSGi的服务纲要规范(OSGi ServiceCompendium)和OSGi企业级规范(OSGi ServiceEnterpress)中最常用的几个子规范内容,在这一部分里,将会把OSGi技术从理论落地到...

    Spring-OSGI 1.0 M3 中文手册

    Spring是一个全功能的Java/JEE应用框架。它提供了一个轻量级的容易和一个用于依赖注入的非侵入式编程模块,AOP功能和便携式服务抽取。...对于使用OSGI平台特性的企业级开发者来说这些都是简单和熟悉的编程模型

    Java Application Architecture Modularity Patterns with Examples Using OSGi Part2

    4.1 企业级复杂性 4.2 技术债 4.3 设计腐化 4.3.1 干扰可维护性 4.3.2 阻止可扩展性 4.3.3 抑制可重用性 4.3.4 限制可测试性 4.3.5 妨碍集成 4.3.6 阻碍理解 4.4 循环依赖 4.4.1 循环类型 4.4.2 悄然引入...

    Java Application Architecture Modularity Patterns with Examples Using OSGi Part1

    4.1 企业级复杂性 4.2 技术债 4.3 设计腐化 4.3.1 干扰可维护性 4.3.2 阻止可扩展性 4.3.3 抑制可重用性 4.3.4 限制可测试性 4.3.5 妨碍集成 4.3.6 阻碍理解 4.4 循环依赖 4.4.1 循环类型 4.4.2 悄然引入的循环 ...

    开源企业级ERP;CRM;SCM系统-idempiereServer11.gtk.linux.x86-64

    IDempiere是一款基于Compiere/ADempiere的开源企业级ERP&CRM&SCM系统, 由于是在ADempiere基础上用OSGi进行了重构,这为后续的商务解决方案的开发、扩展扫平了道路。 # 不过,想知道什么是iDempiere的话,还是看看这...

    开源企业级ERP&CRM&SCM系统-idempiereServer7.1.gtk.linux.x86_64.zip

    Dempiere是一款基于Compiere/ADempiere的开源企业级ERP&CRM&SCM系统, 由于是在ADempiere基础上用OSGi进行了重构,这为后续的商务解决方案的开发、扩展扫平了道路。 # 不过,想知道什么是iDempiere的话,还是看看这...

    开源企业级ERP;CRM;SCM系统---idempiereServer8.2.gtk.linux.x86_64.zip

    IDempiere是一款基于Compiere/ADempiere的开源企业级ERP&CRM&SCM系统, 由于是在ADempiere基础上用OSGi进行了重构,这为后续的商务解决方案的开发、扩展扫平了道路。 # 不过,想知道什么是iDempiere的话,还是看看这...

    基于SSH2+Maven+EasyUI+MySQL技术实战开发易买网电子商务交易平台

    由于富客户端技术进一步扩展浏览器功能,使之提供更加高效和友好的用户接口,越来越多的企业和开发人员选择使用富客户端技术构建商业应用,本课程主要是介绍了解最流行的富客户端框架jquery - easyUI API及熟悉掌握...

    spring 3.0 jar 所有开发包及开发项目实例

    org.springframework.context-3.0.0.M4.jar: 提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等 org.spring...

    SPRING攻略 第2版.pdf

    随着Spring框架最新版本——3.0版的发布,Spring平台已经发展成熟,成为Java、Java虚拟机、Groovy、NET或者Action-Script开发人员最强大、最具革命性的...卢比奥,Daniel Rubio,超过10年的企业级和Web开发经验顾问。

    SPRING攻略 第2版

    随着Spring框架最新版本——3.0版的发布,Spring平台已经发展成熟,成为Java、Java虚拟机、Groovy、NET或者Action-Script开发人员最强大、最具革命性的...卢比奥,Daniel Rubio,超过10年的企业级和Web开发经验顾问。

    Spring攻略(第二版)高清版

    随着Spring框架最新版本——3.0版的发布,Spring平台已经发展成熟,成为Java、Java虚拟机、Groovy、NET或者Action-Script开发人员最强大、最具革命性的...卢比奥,Daniel Rubio,超过10年的企业级和Web开发经验顾问。

    SPRING攻略 第2版 (带书签)(一)

    随着Spring框架最新版本——3.0版的发布,Spring平台已经发展成熟,成为Java、Java虚拟机、Groovy、NET或者Action-Script开发人员最强大、最具革命性的...卢比奥,Daniel Rubio,超过10年的企业级和Web开发经验顾问。

    SPRING攻略 第2版 (带书签)(二)

    随着Spring框架最新版本——3.0版的发布,Spring平台已经发展成熟,成为Java、Java虚拟机、Groovy、NET或者Action-Script开发人员最强大、最具革命性的...卢比奥,Daniel Rubio,超过10年的企业级和Web开发经验顾问。

    Spring攻略 英文第二版

    随着Spring框架最新版本——3.0版的发布,Spring平台已经发展成熟,成为...卢比奥,Daniel Rubio,超过10年的企业级和Web开发经验顾问。 这是这本书的英文版,可以对着中文去看看,如果觉得中文翻译的有问题,可以参考

    服务体系架构(SOA)和业务组件(BC)的思考

    如何进行“组件化”开发是搭建企业级业务基础平台时需要考虑的一个重要课题,本文通过建立业务组件(BC)接口模型及内部结构模型,提供了一个在新开发系统环境下基于Web服务和OSGi标准的组件化开发模型。

Global site tag (gtag.js) - Google Analytics