Peter品评JSR277

Peter对于JSR 277是极度的关注,毕竟JSR 277和OSGi在实现的目标上具备了那么多的共同性,从98年开始,Peter就希望能加入JSR 277 JCP Group,但是被拒了,JSR 277基本完全是SUN在主导的,经过这么多年了,JSR 277的草稿终于是发布出来了,Peter在对JSR 277做了Review后特意写了篇Blog做了评价,总结而言,Peter认为JSR 277 just like a toy,JSR 277并没有吸取OSGi在这8年模块化方面的教训和经验,在模块的一致性校验、可选性、分离包机制等等方面都缺少足够的考虑,原文见:
http://www.osgi.org/blog/2006/10/jsr-277-review.html
作为OSGi的主席,Peter在Java规范的模块化和动态化绝对是具备足够的发言权的,他对于JSR 277过分简单的解决规范的模块化的策略感到很遗憾,JSR 277采取的是一种类似OSGi Require-Bundle的机制来形成模块,模块在JSR 277中定义为以Module的形式来进行部署,对于Module的信息如(引用的模块、对外暴露的包和资源文件等)则在MODULE-INF/METADATA.module中进行描述,每个标准的JSR 277模块需要有一个Main类,在这个类中需要有一个Main方法,在触发Main方法前,环境必须首先检测此模块所引用的模块是否已OK,如没有OK的话是不会启动的,从这已经反应出了,JSR 277是不支持动态化的,在JSR 277中模块不支持卸载,同样,在运行期是无法改变模块和加载新的模块的,必须在停了VM后才能进行这些操作,OK,也许对于不是那么看重动态性的应用来讲这点没那么重要,但是JSR 277在规范的模块化上做的实在是过于简单,考虑欠周,为什么这么说呢?
按照Peter说的几点来看看:
一致性校验
JSR 277中模块是通过直接引用其他的模块来形成依赖的,但它仅仅以模块名以及版本来构成依赖,并未去解决一致性的问题,这样说很晦涩,举例来说:
有A、B、C、D四个模块:
A 引用 B 1.0,C 1.0
B 1.0 引用 D 1.1
C 1.0 引用 D 1.0
在JSR 277中这样的情况下会出现A同时可看到D 1.0和1.1两个版本下的类,自然就很容易产生冲突,这个相信大家早就对java中引用包冲突的现象恨之入骨了....
可选性
可选性这个显然是因为JSR 277不支持动态性而形成的,Peter举了个例子是这样的:
一个类可被作为Ant Task、Eclipse Plugin等多种形式来运行,在JSR 277为了让这个类可以被各种各样的方式运行,不得不把相关的包全部导入,而在OSGi中则不需要,可以通过optional的方式来动态的去加载所需要的包,这点对于大型应用而言是比较重要的。
未提供包共享的机制
JSR 277不是采用包共享的机制来实现模块之间的类的共享,而是通过模块引用的方式来实现,这个带来的问题很明显,平白的去多引用了不需要的东西,而JSR 277采用模块引用这样的方式也让我们看到JSR 277并没有充分考虑如何实现模块之间的互动。
Peter最后提及他非常不看好JSR 277,他觉得如果JSR 277能够通过的话要么是因为各大厂商根本就不关心,要么就是因为SUN在这个规范中的主导地位。

上面几点是Peter所言,个人认为JSR 277作为模块化的规范,应该为模块的定义、设计、开发、部署都做到足够的考虑,而以目前JSR 277来看,在模块通信机制、模块管理上缺乏完整的定义,而这些是一个模块化的规范中最为根本和重要的东西,而OSGi中则提供了Bundle contains multiple components,Service-Oriented Component Model以及强大的动态化的Bundle管理API来实现模块的通信和管理,至少从目前看来,OSGi的设计思想仍然是模块化设计系统的一种很好的指导思想。

ps: 在明年的Eclipse大会上将会专门有OSGi的专题部分,而且在看Eclipse 3.3的feature中可以发现Eclipse 3.3很重视对于基于OSGi开发系统更好的支持 :)

posted on 2006-10-20 22:39 BlueDavy 阅读(2450) 评论(8)  编辑  收藏 所属分类: OSGi、SOA、SCA

评论

# re: Peter品评JSR277 2006-10-21 12:58 dogstar

sun就爱自己弄一套,这样也有好处。当选择osgi的时候有了一个对比的对象,这样更容易选择osgi。呵呵。从这一点上看来,sun的作用还是非常重要的。。。  回复  更多评论   

# re: Peter品评JSR277 2006-10-21 17:15 破门

@dogstar 强。:)
的确,没有参照物,不太容易知道好的究竟有多好。呵呵  回复  更多评论   

# re: Peter品评JSR277 2006-10-24 17:09 swanliu

似乎楼主研究过模块化的理论

我有一个维护了2年的系统,
代码里很多地方在调用其他类、模块、系统、但没有经过考虑、登记、审批,使各模块依赖关系不明确。存在无比巨大隐患。。。

前面楼主提到的osgi的模块化规范,请问我读了以后是不是有助于解决这类问题  回复  更多评论   

# re: Peter品评JSR277 2006-10-25 15:12 小小凉粉

BlueDavy兄,有没有兴趣和时间一起组织翻译一下OSGI的Core specification啊?  回复  更多评论   

# re: Peter品评JSR277 2006-10-25 19:14 BlueDavy

@swanliu
呵呵,建议读读


@ 小小凉粉
有这个想法,不过一直没行动..  回复  更多评论   

# re: Peter品评JSR277 2006-10-25 21:13 小小凉粉

@BlueDavy

可不可以一起行动啊?  回复  更多评论   

# re: Peter品评JSR277 2006-10-26 16:51 小小凉粉

我可以先翻译出来某一节

然后我们可以到满江红上提出这个建议

看看有没有人愿意一起参加进来

你看如何?  回复  更多评论   

# re: Peter品评JSR277 2006-10-26 23:18 BlueDavy

@ 小小凉粉
嗯,好建议,完全支持。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

公告

 









feedsky
抓虾
google reader
鲜果

导航

<2006年10月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

随笔分类

随笔档案

文章档案

Blogger's

搜索

最新评论

阅读排行榜

评论排行榜