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开发系统更好的支持 :)
分享到:
- 2006-10-20 22:39
- 浏览 2151
- 评论(0)
- 论坛回复 / 浏览 (0 / 3208)
- 查看更多
相关推荐
JSR(Java Specification Requests)是Java社区进程(JCP,Java Community Process)的一部分,用于提出和定义新的Java技术规范。JSR168和JSR268是两个与Java Portal技术相关的标准,它们主要涉及如何创建和管理可...
### JSR268门户标准概述 #### 一、JSR168与JSR286背景 JSR168(Java Specification Request 168)是Java门户技术的第一个标准化规范,发布于2003年10月。这一规范定义了一种通用框架,用于构建基于门户的应用程序...
Spring Core提供了一种优雅的方式来处理参数校验,特别是通过JSR 303、JSR 349和JSR 380这些标准注解,实现了高效且易于维护的验证机制。 JSR 303最初定义了JavaBean验证的标准,而JSR 349是其修订版,主要增加了对...
赠送jar包:jsr311-api-1.1.1.jar; 赠送原API文档:jsr311-api-1.1.1-javadoc.jar; 赠送源代码:jsr311-api-1.1.1-sources.jar; 赠送Maven依赖信息文件:jsr311-api-1.1.1.pom; 包含翻译后的API文档:jsr311-api...
本文是JSR-133规范,即JavaTM内存模型与线程规范,由JSR-133专家组开发。本规范是JSR-176(定义了JavaTM平台 Tiger(5.0)发布版的主要特性)的一部分。本规范的标准内容将合并到JavaTM语言规范、JavaTM虚拟机规范...
**JSR 173 API**,全称为Java Specification Request 173,是Java社区进程(Java Community Process)发布的一个标准,旨在为Java平台引入标准化的可扩展性框架,以便处理XML流数据。该API的主要目标是为Java开发者...
JSR(Java Specification Request)168和286是定义portlet标准的两个关键版本,它们由Java Community Process(JCP)发布,旨在促进portlet在门户环境中的互操作性和可扩展性。 JSR 168是portlet规范的第一个主要...
Java内存模型(JMM)是Java程序并发执行时的核心规范,由JSR-133专家小组开发。JSR-133全称为JavaTM Memory Model and Thread Specification,它的目标是确保多线程环境下程序的可见性和一致性。该规范与Java平台...
**JSR256 API** 是Java Community Process (JCP) 定义的一个规范,全称为Java Specification Request 256。这个API专注于在Java 2 Micro Edition (J2ME) 平台上提供传感器接口,使得移动设备和嵌入式系统能够有效地...
**JSR133中文版** 是一份关于Java内存模型(Java Memory Model,JMM)的重要文档,它详细解释了JSR(Java Specification Requests)133中的规范,该规范对Java平台的并发编程有着深远的影响。JSR是Java社区进程...
JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator。JSR 303 用于对 Java Bean 中的字段的值进行验证。 Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对...
赠送jar包:jsr311-api-1.1.1.jar; 赠送原API文档:jsr311-api-1.1.1-javadoc.jar; 赠送源代码:jsr311-api-1.1.1-sources.jar; 赠送Maven依赖信息文件:jsr311-api-1.1.1.pom; 包含翻译后的API文档:jsr311-api...
JSR133规范
jsr305.jar jsr305.jar jsr305.jar
赠送jar包:jsr305-3.0.2.jar; 赠送原API文档:jsr305-3.0.2-javadoc.jar; 赠送源代码:jsr305-3.0.2-sources.jar; 赠送Maven依赖信息文件:jsr305-3.0.2.pom; 包含翻译后的API文档:jsr305-3.0.2-javadoc-API...
赠送jar包:undertow-websockets-jsr-2.1.7.Final.jar; 赠送原API文档:undertow-websockets-jsr-2.1.7.Final-javadoc.jar; 赠送源代码:undertow-websockets-jsr-2.1.7.Final-sources.jar; 赠送Maven依赖信息...
jsr305-3.0.2.jar
JSR303,全称为Java Specification Request 303,是Java Community Process(JCP)提出的一个关于数据校验的标准。这个标准定义了在Java应用程序中进行验证的一系列API和注解,使得开发者能够方便地对输入数据进行...
jsr305-1.3.9