Log4Classicning

好读书 不求甚解 每有会意 便欣然忘食

OSGi
2008年8月3日

断断续续心不在焉地看了一天OSGi相关的东西,照着Apache Felix的Tutorials跑了一遍,大概有个概念了。

我理解OSGi作为一个容器,最大的特点莫过于支持软件模块的热插拔了。与Spring这样传统的容器不同,Spring在初始化的时候就根据xml配置文件完成了模块(在Spring来说是bean)的注册,运行时仅仅管理依赖注入和scope等问题了,是reflection级别的。OSGi在相对更底层一些的ClassLoader级别做文章(这块还没细看,bluedavy的某篇opendoc有简单的介绍),实现了一种在容器运行时注册、反注册模块(对OSGi来说是Bundle)的机制,优点好处不言而喻。

OSGi对Bundle的管理,每个Bundle可以输出接口,也可以引用其他Bundle的接口,从而Bundle间形成依赖关系。接口在容器中注册,容器管理相关的依赖关系,形成一个类似注入的机制。

对Apache Felix来说,每一个Bundle需要有一个Activitor,定义Bundle启用和禁用时所需执行的逻辑。每个Bundle的元信息定义在jar的manifest中,包括服务的名字、Activitor类的路径、导入是导出的接口等。

Spring的一个子项目Dynamic Moudle致力于将OSGi的机制与既有的给予Spring系统的代码结合,是Spring的系统适应OSGi,支持动态特性。

暂时还只有这些粗浅的认识,目前我还想不出如何针对这些特性把它应用到我已有的项目里,或者针对这种特性开始一个新的项目。

不过话说回来了,其实我每日的工作就是在Eclipse的OSGi平台Equinox上进行的,只不过是隔了太多层,我已然感觉不到它的存在了。想想也是,为什么我们每次修改插件的代码后运行无需重启Eclipse呢。

« days without logging吃醋 »
  • quote 1.Goodtiger
  • http://goodtiger.javaeye.com/
  • ClassLoader, 有一个Parent loader,以及每个Bundle都有一个独立的Classloader,所以加载和卸载Bundle的时候都不会相互影响。Spring和Java7都在支持或者说兼容OSGi,Sun原本也想自己搞一套的(JSR277),后来OSGi影响大了,就把鼻祖Peter邀请过去搞JSR291了,和当年Spring成为事实标准之后差不多。现在OSGi对于BS应用,特别是对于已有框架的集成,还是比较弱的,这方面就要看Spring Dynamic Moudle会发展成怎么样
  • 2008-8-3 22:13:55 回复该留言
  • quote 2.zjuntor
  • 路漫漫其修远兮
    看了几天的Spring,已倍感惊叹;看过上文,把嘴再张大点也不为过。
  • 2008-8-4 10:44:59 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Search

站点统计

  • 文章总数:745
  • 评论总数:2630
  • 引用总数:4
  • 浏览总数:5693
  • 留言总数:42
  • 当前主题:ClassicningDailyLog Style
  • 当前样式:footoo

网站收藏

图标汇集

  • Creative Commons License
  • Widgetize!
  • visitor stats

Powered By Z-Blog 1.8 Spirit Build 80722

2004 - 2007 Classicning.com. 苏ICP备06039259号.