✍前言
你好,我是方同学(YourBatman)
A哥 -> 方同学。是的,中文昵称改了。自知道行不深无以用“哥”字称呼,虽已毕业多年,同学二字寄寓心态一直积极、热情、年轻
时间拨回到2018年5月,阿里巴巴获邀加入JCP最高执行委员会,以替代恩智浦被选举为该委员会委员,成为第一家加入JCP的中国企业。一时间铺天盖地的新闻报道,轰动IT圈。
JCP的执行委员任期2年,时至现在的2021年,午夜梦回中忆起此事,再去JCP官网查阅一下,还好牛皮可以继续吹,(2020年投票选举)连任成功!
很明显这篇文章绝非吹捧阿里,旨在向你介绍作为一名Java程序员必知必会的JSR规范、JCP组织。
程序员是信息时代的技术人才,常听到的一句话是“我现在有一个想法可以改变世界、可以颠覆行业、可以超越BAT,但就差一个程序员了”,可见程序员的重要性。中国软件行业发展至今(2021年)已有700万的程序员,虽然人数在全球遥遥领先,但声音一直非常小,影响力也微乎其微。
阿里巴巴作为国内Javaer的“圣地”,almost代表着最高水平。作为一枚Java开发者,听过无数J字缩略语:JDK、JRE、JVM、JSE、JCP、JPA、Jakarta…本文将以此为背景,为你介绍与每个Java程序员都息息相关的JCP(含JSR规范),然后就会感受到加入JCP这件事多么牛X了。
版本约定
- JSR、JCP
✍正文
若有人问你Java平台分为哪三个版本,你应该能答出来:
- Java标准版(Java SE)
- Java企业版(Java EE)
- Java Micro Edition(Java ME)
很好,60分及格。若夺命连环问继续追问:听过JSR、JCP吗?如果说上道题还在嘿嘿的说是送分题,那这道题估摸可能大概就成为你的送命题了。
什么是JSR?
Java Specification Requests:Java规范请求/提案。
JSR是指的向JCP提出新增一个标准化技术规范的正式请求。每个JSR都是正式的、开放的标准文档,由个人或组织提交给JCP组织进行审议,根据审议结果决定JSR是否最终发布。
课代表帮你总结一下JSR定义的关键点:
- 任何人(个人/组织)都可以向JCP提交JSR,当然前提是你要注册成为JCP的会员(个人会员免费,现在由Oracle管理维护)
- 每个JSR都是正式的文档,必须符合JCP的规定的格式(这个门槛不低)
- JSR是开放的,任何人都应该可以很方便获取到它
- JSR的内容是对Java技术平台提出的修改、补充和改进,包括Java技术栈增加新功能、修改bug、提升性能等
每个JSR都只是一个抽象的规范(还只是文档,在纸面上的规范),通过设计API落地成为接口代码规范,最后通过参考实现来提供具体的功能落地,进而供以使用。
JCP规定每个JSR规范都必须有一个官方参考实现,言外之意:可以有多个其它实现。
如图,API代码规范可认为是JSR规范的代码表现形式,被纳入Java体系内。值得注意的是:JSR并非Java EE的专属,三个版本里都有,个数如下:
说明:某些JSR直接与一个或多个Java平台相关,还有许多JSR不是平台的一部分,而是对平台的扩充。此表格只列出了与特定版本相关的JSR(表格数据截止到2021年7月)
虽然Java每个平台都有JSR,但我们常常只把JSR和Java EE一起提及。Java EE中的每个API实际上都是由审核通过了的某个JSR规范所定义的。换句话讲:Java EE由各种组件构成,这些组件遵从JSR规范所规定的内容、功能。
一个JSR从提出后,生命周期交由JCP组织管理,有可能被拒绝不通过,也有可能最终 Final RELEASE。一旦某个JSR通过了JCP的审核, 它就变成了Java技术栈的一部分,可以安全地用于生产环境。但这个门槛非常非常非常高,时间周期也会很长。
常见JSR及参考实现举例
在日常开发中,JSR出现的频率还是蛮高的。即使你不用EJB开发,而是使用Spring技术栈、又或者是Dubbo都经常能看到JSR的身影。JSR种类繁多,仅已经毕业(Final Release)的就有260+个:
我们不可能逐个去了解每个,下面课代表就帮搜集了些常见(现在大都在Spirng技术体系下开发,所以常用二字是以此为背景解释)、常用、仍旧流行的JSR规范以及对应的主流实现(主流实现并非都是官方参考实现哦):
这都是Java EE相关的JSR规范(一般Java EE接触多),其实Java SE也有熟悉的规范,比如JSR 310日期时间(也叫Java 8日期时间)就是典型代表。
每个JSR都有一个.pdf文件做说明,这里都帮你收藏好了:https://github.com/yourbatman/JSR-JCP
什么是JCP?
Java Community Process:Java非正式过程(形式化和标准化Java技术的过程),官网地址:https://jcp.org
一个开放的国际组织,主要由Java开发者以及被授权者组成,职能是发展和更新。JCP由Sun公司于1995年创造,演进到如今有数百名来自世界各地Java代表成员一同监督Java发展的正式程序。
如果说JSR代表着一种具体的规范技术,那么JCP就是管理这些JSR发展、更新的组织。
JCP是为Java技术开发标准技术规范的机制。任何人都可以注册该站点,参与对Java规范请求(JSR)的审查和提供反馈,任何人都可以注册成为JCP成员,然后加入JSR专家组,甚至提交自己的JSR建议。
JCP它主要包含这几块内容:
- Java技术规范:JSR规范
- 参考实现(RI):JCP要求每个JSR都需要有一个参考实现
- 技术兼容包(TCK):兼容测试工具包,一套测试、工具和文档,用于测试实现是否符合规范
- JCP Members:由个人or组织构成JCP的成员
- Executive Committee (EC) :(最高)执行委员会。EC代表了主要的利益相关者和Java社区的一个代表性部门。EC负责批准通过JCP关键点的规范,并协调规范及其相关测试套件之间的差异
JCP Member还可细分为准会员、合作伙伴会员、正式会员,每种身份都有不同权利,这个对“不打算”参与提交JSR的我们来讲没啥用,so…对于JCP这个组织,我们或许对这些更感兴趣些:
- 参与一个JSR规范生命周期的主要角色有哪些?
- 执行委员会(EC)这个组织有哪些成员?
- 一个JSR从提出到最终RELEASE需要经历哪些过程,要多久?
参与JSR生命周期的角色
开发一个JSR标准技术的成本是非常昂贵的,JCP对此有严格的流程,期间会涉及到三个角色:
- 贡献者
- 专家组
- 规范领导者
当然还少不了最高决策者:执行委员会EC。各个角色的分工、关系如下图:
以Bean Validation 2.0(JSR 380)为例,团队成员如下:
Gunnar Morling是谁?答:Hibernate Validator的作者,所以说JSR 380规范是由Hibernate主导的毫不为过。
1、贡献者
类似于Github上的Contributor,一般都是个人(JCP的准会员)。在1个或多个JSR上帮忙过,比如帮助测试、帮助修正、开发了JSR特征等。这是加入JCP“往上爬”的第一步,如果表现突出的话就会被放进专家组候选人,从而可能进入专家组。
类似于小组的一线员工
2、专家组
专家组对该JSR起到核心作用,均由对本JSR基础十分熟悉、功底十分深厚、有一定权威的人担任。他们算是JSR规范实施的“基层员工”,直接参与到JSR开发的具体工作。
类似于小组的技术优秀员工
3、规范领导者
一般是JSR的申请者/作者。
领导者的作用主要职责是指导专家组和贡献者实施,统揽本JSR全局,为它负责。主要工作有:
- 提供JSR参考实现
- 完成TCK测试,确保JSR合法、合规、兼容性强
- 时刻关注JSR的进程,并且将状态同步到jcp.org的页面上。并且提供草稿review、公开review、最终文档等
类似于小组组长
执行委员会EC
执行委员会(EC),也叫最高执行委员会,在JCP中扮着决定性作用,它就像最高权力机关,掌握着每个JSR的生杀大权。该委员会的成员必须分析、评论、投票并决定批准提交给JCP的所有JSR。除此之外还得指导整个平台的发展,以及JCP本身,使其能够一直符合期望。真乃权利越大,责任越大。
类似于技术总监、CTO。总体来讲EC有这4项任务:
- 审核并投票批准或拒绝 新的 JSR提案
- 审查和投票批准或拒绝public公开审查的JSR草案
- 决定何时撤回JSR,比如过时的技术
- 合作修订JCP计划
几十年以来JCP最高执行委员会的18个席位都被美国、欧洲、日本等国家企业牢牢占据,直至2018年阿里巴巴的加入。
阿里巴巴入选JCP执行委员会EC
委员会的成员通过年度选举产生。
时间拨回到2018年5月18日,阿里巴巴成功替代恩智浦被选举为JCP最高委员会委员,任期2年(2020年的选举继续连任成功)。成为第一家加入JCP的中国企业,可谓是国人的骄傲。这是最新的EC成员表(共18个席位):
有个比较有趣的点:Alibaba以字母“A”打头可谓占尽优势,“排名第一”!
这份EC成员表单有这三大看点可以关注:
一个JSR经历的阶段
JCP管理着所有的JSR规范,每个JSR都需要按照JCP组织制定的流程进行。我以已经发布的、大家相对比较熟悉的JSR 380: Bean Validation 2.0
为例,看看它的经历过程:
Final Approval Ballot最终投票结果:
从步骤上看一共8大步,从时间轴上看共历时13个月,看似时间很长。但其实像Bean Validation这种路途其实是非常非常非常顺利的,属于全部一次性过。存在那种投票了N次才最终Final甚至一直没有Final的,比如JSR 377: Desktop|Embedded Application API的路就比较坎坷:
看上面的投票截图也许你会疑问,投票成员中为嘛没有Alibaba呢?看看投票日期:2017-07,而阿里巴巴于2018-05才首次成为JCP的EC成员,咱们找一个投票日期近一点看看就有阿里的身影,这是来自东方的声音 :
一个JSR从0到1需要经历这些个步骤:
- 起草写一个JSR
- 将此JSR提交到JCP
- 公开早期的JSR接收review
- 形成专家组EG(希望很大了)
- 早期草案审查
- 公开review
- 拟议的最终草案
- 最后的选票(可能经过多轮)
时间轴安排大致如下:
总之,一个JSR想要最终毕业,少则1-2年多则5年+,甚至流产。
JCP的影响力在减弱
随着2009年Oracle收购Sun公司,使得它在JCP里处于一言堂的地位 ,别人都没法玩了。2010年是个关键节点,Apache当年直接斥责Oracle滥用Java,于是“一生气”退出了JCP,至今未归。
2017年8月份,Oracle对外宣称要让Java EE更加敏捷、灵活(都是套话,就是觉得自己玩不转了想当甩手掌柜),计划交给开源社区。随后的9月份便“卖给”了Eclipse基金会,但Java商标、Java SE部分仍旧自己牢牢掌握着。所以Java EE从此不得不改名为Jakarta EE且正式脱离JCP(参考文章:从Java EE到Jakarta EE,企业版Java的发展历程)。
至此,JCP本为三大平台Java ME、Java SE、Java EE贡献JSR规范,现在仅剩Java SE(Java ME可认为基本已死)。而Java SE独属于Oracle,所以JCP的影响力逐渐步入衰落。作为开发者的我们也有切身感受:随着EJB的败下阵来,随着Spring家族的异军突起,打得Java EE都快找不着北了。
瘦死骆驼比马大,在若干年内了解JCP了解JSR规范依旧非常非常非常重要,是刚需,因为考试要考、面试会问、工作要用。
✍总结
JCP组织辉煌时通过管理的JSR规范驱动着Java的三驾马车(Java SE、EE、ME)向前发展,严格的流程规范是确保Java技术高质量、高兼容性的保证。随着Apache基金会决裂的退出,随着Spring家族的崛起,随着Java EE的光芒越来越暗淡,正所谓眼看他起高楼,眼看他宴宾客,眼看他楼塌了,JCP组织影响力也在逐日减弱。
规范永远属于“一流技术”,作为一个Java程序员建议这是每个同学的必修课,因为它决定着自己的上限。而且这不仅仅是谈资,而是实战中切实会用到知识点。
下篇文章将为你回答“Java EE是什么?”,了解它和JSR有哪些关系,为何一般说到JSR都是和Java EE相关。