阿里巴巴入選的JCP最高執(zhí)行委員會,何方神圣?
前言
你好,我是A哥(YourBatman)
時間撥回到2018年5月,阿里巴巴獲邀加入JCP最高執(zhí)行委員會,以替代恩智浦被選舉為該委員會委員,成為第一家加入JCP的中國企業(yè)。一時間鋪天蓋地的新聞報道,轟動IT圈。
JCP的執(zhí)行委員任期2年,時至現(xiàn)在的2021年,午夜夢回中憶起此事,再去JCP官網(wǎng)查閱一下,還好牛皮可以繼續(xù)吹,(2020年投票選舉)連任成功!圖片很明顯這篇文章絕非吹捧阿里,旨在向你介紹作為一名Java程序員必知必會的JSR規(guī)范、JCP組織。
程序員是信息時代的技術(shù)人才,常聽到的一句話是“我現(xiàn)在有一個想法可以改變世界、可以顛覆行業(yè)、可以超越BAT,但就差一個程序員了”,可見程序員的重要性。中國軟件行業(yè)發(fā)展至今(2021年)已有700萬的程序員,雖然人數(shù)在全球遙遙領(lǐng)先,但聲音一直非常小,影響力也微乎其微。
阿里巴巴作為國內(nèi)Javaer的“圣地”,almost代表著最高水平。作為一枚Java開發(fā)者,聽過無數(shù)J字縮略語:JDK、JRE、JVM、JSE、JCP、JPA、Jakarta...本文將以此為背景,為你介紹與每個Java程序員都息息相關(guān)的JCP(含JSR規(guī)范),然后就會感受到加入JCP這件事多么牛X了。圖片
所屬專欄
BATutopia-Java EE
相關(guān)下載
Java EE工程源代碼:https://github.com/yourbatman/BATutopia-java-ee
JSR-JCP工程源代碼:https://github.com/yourbatman/JSR-JCP
JSR文件網(wǎng)盤下載:https://wangpan.yourbatman.cn/s/nRtq 密碼:jsrjcp
版本約定
JSR、JCP
正文
若有人問你Java平臺分為哪三個版本,你應(yīng)該能答出來:
- Java標準版(Java SE)
- Java企業(yè)版(Java EE)
- Java Micro Edition(Java ME)
很好,60分及格。若奪命連環(huán)問繼續(xù)追問:聽過JSR、JCP嗎?如果說上道題還在嘿嘿的說是送分題,那這道題估摸可能大概就成為你的送命題了。
什么是JSR?
Java Specification Requests:Java規(guī)范請求/提案。
JSR是指的向JCP提出新增一個標準化技術(shù)規(guī)范的正式請求。每個JSR都是正式的、開放的標準文檔,由個人或組織提交給JCP組織進行審議,根據(jù)審議結(jié)果決定JSR是否最終發(fā)布。
課代表幫你總結(jié)一下JSR定義的關(guān)鍵點:
- 任何人(個人/組織)都可以向JCP提交JSR,當然前提是你要注冊成為JCP的會員(個人會員免費,現(xiàn)在由Oracle管理維護)
- 每個JSR都是正式的文檔,必須符合JCP的規(guī)定的格式(這個門檻不低)
- JSR是開放的,任何人都應(yīng)該可以很方便獲取到它
- JSR的內(nèi)容是對Java技術(shù)平臺提出的修改、補充和改進,包括Java技術(shù)棧增加新功能、修改bug、提升性能等
每個JSR都只是一個抽象的規(guī)范(還只是文檔,在紙面上的規(guī)范),通過設(shè)計API落地成為接口代碼規(guī)范,最后通過參考實現(xiàn)來提供具體的功能落地,進而供以使用。
JCP規(guī)定每個JSR規(guī)范都必須有一個官方參考實現(xiàn),言外之意:可以有多個其它實現(xiàn)。
如圖,API代碼規(guī)范可認為是JSR規(guī)范的代碼表現(xiàn)形式,被納入Java體系內(nèi)。值得注意的是:JSR并非Java EE的專屬,三個版本里都有,個數(shù)如下:
平臺 | JSR個數(shù) |
---|---|
Java SE | 69 |
Java EE | 54 |
Java ME | 85 |
說明:某些JSR直接與一個或多個Java平臺相關(guān),還有許多JSR不是平臺的一部分,而是對平臺的擴充。此表格只列出了與特定版本相關(guān)的JSR(表格數(shù)據(jù)截止到2021年7月)
雖然Java每個平臺都有JSR,但我們常常只把JSR和Java EE一起提及。Java EE中的每個API實際上都是由審核通過了的某個JSR規(guī)范所定義的。換句話講:Java EE由各種組件構(gòu)成,這些組件遵從JSR規(guī)范所規(guī)定的內(nèi)容、功能。
一個JSR從提出后,生命周期交由JCP組織管理,有可能被拒絕不通過,也有可能最終 Final RELEASE。一旦某個JSR通過了JCP的審核, 它就變成了Java技術(shù)棧的一部分,可以安全地用于生產(chǎn)環(huán)境。但這個門檻非常非常非常高,時間周期也會很長。
常見JSR及參考實現(xiàn)舉例
在日常開發(fā)中,JSR出現(xiàn)的頻率還是蠻高的。即使你不用EJB開發(fā),而是使用Spring技術(shù)棧、又或者是Dubbo都經(jīng)常能看到JSR的身影。JSR種類繁多,僅已經(jīng)畢業(yè)(Final Release)的就有260+個:
我們不可能逐個去了解每個,下面課代表就幫搜集了些常見(現(xiàn)在大都在Spirng技術(shù)體系下開發(fā),所以常用二字是以此為背景解釋)、常用、仍舊流行的JSR規(guī)范以及對應(yīng)的主流實現(xiàn)(主流實現(xiàn)并非都是官方參考實現(xiàn)哦):
JSR | 代表API | 主流實現(xiàn) | 簡介 |
---|---|---|---|
JSR 315、JSR 369 |
Servlet、Filter | Tomcat、Jetty | 處理Http請求 |
JSR 303、JSR 380 |
Validator、@Valid | Hibernate Validator | Bean Validation數(shù)據(jù)校驗 |
JSR 330 |
@Inject、@Singleton | Spring、Guice | DI依賴注入 |
JSR 318、JSR 345 |
@EJB、EntityContext | Glassfish | 企業(yè)級Bean |
JSR 317、JSR 907 |
@Entity、@ManyToMany、@Column | Hibernate | JPA數(shù)據(jù)持久化 |
JSR 250 |
@PostConstruct、@Resource | Spring | Common通用注解 |
JSR 914、JSR 343 |
@JMSProducer、MessageConsumer | ActiveMQ、Artemis | JMS MQ消息隊列 |
JSR 907 |
TransactionManager | atomikos | JTA分布式事務(wù) |
JSR 919 |
@MailSessionDefinition | JavaMail | Java郵件 |
JSR 3 |
MBeanServer、@ManagedBean | Java SE | JMX擴展 |
JSR 221 |
Connection、Statement | MySql、Oracle | JDBC規(guī)范 |
這都是Java EE相關(guān)的JSR規(guī)范(一般Java EE接觸多),其實Java SE也有熟悉的規(guī)范,比如JSR 310日期時間(也叫Java 8日期時間)就是典型代表。
每個JSR都有一個.pdf文件做說明,這里都幫你收藏好了:https://github.com/yourbatman/JSR-JCP
什么是JCP?
Java Community Process:Java非正式過程(形式化和標準化Java技術(shù)的過程),官網(wǎng)地址:https://jcp.org
一個開放的國際組織,主要由Java開發(fā)者以及被授權(quán)者組成,職能是發(fā)展和更新。JCP由Sun公司于1995年創(chuàng)造,演進到如今有數(shù)百名來自世界各地Java代表成員一同監(jiān)督Java發(fā)展的正式程序。
如果說JSR代表著一種具體的規(guī)范技術(shù),那么JCP就是管理這些JSR發(fā)展、更新的組織。
JCP是為Java技術(shù)開發(fā)標準技術(shù)規(guī)范的機制。任何人都可以注冊該站點,參與對Java規(guī)范請求(JSR)的審查和提供反饋,任何人都可以注冊成為JCP成員,然后加入JSR專家組,甚至提交自己的JSR建議。
任何人?呵,開玩笑,不信你去注冊試試~
JCP它主要包含這幾塊內(nèi)容:
- Java技術(shù)規(guī)范:JSR規(guī)范
- 參考實現(xiàn)(RI):JCP要求每個JSR都需要有一個參考實現(xiàn)
- 技術(shù)兼容包(TCK):兼容測試工具包,一套測試、工具和文檔,用于測試實現(xiàn)是否符合規(guī)范
- JCP Members:由個人or組織構(gòu)成JCP的成員
Executive Committee (EC) :(最高)執(zhí)行委員會。EC代表了主要的利益相關(guān)者和Java社區(qū)的一個代表性部門。EC負責批準通過JCP關(guān)鍵點的規(guī)范,并協(xié)調(diào)規(guī)范及其相關(guān)測試套件之間的差異
JCP Member還可細分為準會員、合作伙伴會員、正式會員,每種身份都有不同權(quán)利,這個對“不打算”參與提交JSR的我們來講沒啥用,so...對于JCP這個組織,我們或許對這些更感興趣些:
參與一個JSR規(guī)范生命周期的主要角色有哪些?
執(zhí)行委員會(EC)這個組織有哪些成員?
一個JSR從提出到最終RELEASE需要經(jīng)歷哪些過程,要多久?
參與JSR生命周期的角色
開發(fā)一個JSR標準技術(shù)的成本是非常昂貴的,JCP對此有嚴格的流程,期間會涉及到三個角色:
- 貢獻者
- 專家組
- 規(guī)范領(lǐng)導者
當然還少不了最高決策者:執(zhí)行委員會EC。各個角色的分工、關(guān)系如下圖:
以Bean Validation 2.0(JSR 380)為例,團隊成員如下:
Gunnar Morling是誰?答:Hibernate Validator的作者,所以說JSR 380規(guī)范是由Hibernate主導的毫不為過。
1、貢獻者
類似于Github上的Contributor,一般都是個人(JCP的準會員)。在1個或多個JSR上幫忙過,比如幫助測試、幫助修正、開發(fā)了JSR特征等。這是加入JCP“往上爬”的第一步,如果表現(xiàn)突出的話就會被放進專家組候選人,從而可能進入專家組。
類似于小組的一線員工
2、專家組
專家組對該JSR起到核心作用,均由對本JSR基礎(chǔ)十分熟悉、功底十分深厚、有一定權(quán)威的人擔任。他們算是JSR規(guī)范實施的“基層員工”,直接參與到JSR開發(fā)的具體工作。
類似于小組的技術(shù)優(yōu)秀員工
3、規(guī)范領(lǐng)導者
一般是JSR的申請者/作者。
領(lǐng)導者的作用主要職責是指導專家組和貢獻者實施,統(tǒng)攬本JSR全局,為它負責。主要工作有:
- 提供JSR參考實現(xiàn)
- 完成TCK測試,確保JSR合法、合規(guī)、兼容性強
- 時刻關(guān)注JSR的進程,并且將狀態(tài)同步到j(luò)cp.org的頁面上。并且提供草稿review、公開review、最終文檔等
類似于小組組長
執(zhí)行委員會EC
執(zhí)行委員會(EC),也叫最高執(zhí)行委員會,在JCP中扮著決定性作用,它就像最高權(quán)力機關(guān),掌握著每個JSR的生殺大權(quán)。該委員會的成員必須分析、評論、投票并決定批準提交給JCP的所有JSR。除此之外還得指導整個平臺的發(fā)展,以及JCP本身,使其能夠一直符合期望。真乃權(quán)利越大,責任越大。
類似于技術(shù)總監(jiān)、CTO??傮w來講EC有這4項任務(wù):
- 審核并投票批準或拒絕 新的 JSR提案
- 審查和投票批準或拒絕public公開審查的JSR草案
- 決定何時撤回JSR,比如過時的技術(shù)
- 合作修訂JCP計劃
幾十年以來JCP最高執(zhí)行委員會的18個席位都被美國、歐洲、日本等國家企業(yè)牢牢占據(jù),直至2018年阿里巴巴的加入。
阿里巴巴入選JCP執(zhí)行委員會EC
委員會的成員通過年度選舉產(chǎn)生。
時間撥回到2018年5月18日,阿里巴巴成功替代恩智浦被選舉為JCP最高委員會委員,任期2年(2020年的選舉繼續(xù)連任成功)。成為第一家加入JCP的中國企業(yè),可謂是國人的驕傲。這是最新的EC成員表(共18個席位):
有個比較有趣的點:Alibaba以字母“A”打頭可謂占盡優(yōu)勢,“排名第一”!
這份EC成員表單有這三大看點可以關(guān)注:
阿里巴巴的代表Kingsum Chow何許人也?周經(jīng)森2016年加入阿里巴巴
Oracle之于JCP的影響有多大?JCP是一個國際組織并不屬于任何一家公司,但Oracle特殊,它是永久任期。自從2009年Oracle收購了Sun公司后,它在JCP里的話語權(quán)幾乎是壟斷式的~
成員中為何沒有大名鼎鼎的Apache基金會?曾經(jīng),JCP也擁有過Apache,只是后來Apache選擇了退出,究其原因Oracle“功不可沒”
一個JSR經(jīng)歷的階段
JCP管理著所有的JSR規(guī)范,每個JSR都需要按照JCP組織制定的流程進行。我以已經(jīng)發(fā)布的、大家相對比較熟悉的JSR 380: Bean Validation 2.0為例,看看它的經(jīng)歷過程:
Final Approval Ballot最終投票結(jié)果:
從步驟上看一共8大步,從時間軸上看共歷時13個月,看似時間很長。但其實像Bean Validation這種路途其實是非常非常非常順利的,屬于全部一次性過。存在那種投票了N次才最終Final甚至一直沒有Final的,比如JSR 377: Desktop|Embedded Application API的路就比較坎坷:
看上面的投票截圖也許你會疑問,投票成員中為嘛沒有Alibaba呢?看看投票日期:2017-07,而阿里巴巴于2018-05才首次成為JCP的EC成員,咱們找一個投票日期近一點看看就有阿里的身影,這是來自東方的聲音 :
一個JSR從0到1需要經(jīng)歷這些個步驟:
- 起草寫一個JSR
- 將此JSR提交到JCP
- 公開早期的JSR接收review
- 形成專家組EG(希望很大了)
- 早期草案審查
- 公開review
- 擬議的最終草案
- 最后的選票(可能經(jīng)過多輪)
時間軸安排大致如下:
總之,一個JSR想要最終畢業(yè),少則1-2年多則5年+,甚至流產(chǎn)。
JCP的影響力在減弱
隨著2009年Oracle收購Sun公司,使得它在JCP里處于一言堂的地位 ,別人都沒法玩了。2010年是個關(guān)鍵節(jié)點,Apache當年直接斥責Oracle濫用Java,于是“一生氣”退出了JCP,至今未歸。
2017年8月份,Oracle對外宣稱要讓Java EE更加敏捷、靈活(都是套話,就是覺得自己玩不轉(zhuǎn)了想當甩手掌柜),計劃交給開源社區(qū)。隨后的9月份便“賣給”了Eclipse基金會,但Java商標、Java SE部分仍舊自己牢牢掌握著。所以Java EE從此不得不改名為Jakarta EE且正式脫離JCP(參考文章:從Java EE到Jakarta EE,企業(yè)版Java的發(fā)展歷程)。
至此,JCP本為三大平臺Java ME、Java SE、Java EE貢獻JSR規(guī)范,現(xiàn)在僅剩Java SE(Java ME可認為基本已死)。而Java SE獨屬于Oracle,所以JCP的影響力逐漸步入衰落。作為開發(fā)者的我們也有切身感受:隨著EJB的敗下陣來,隨著Spring家族的異軍突起,打得Java EE都快找不著北了。
瘦死駱駝比馬大,在若干年內(nèi)了解JCP了解JSR規(guī)范依舊非常非常非常重要,是剛需,因為考試要考、面試會問、工作要用。
總結(jié)
JCP組織輝煌時通過管理的JSR規(guī)范驅(qū)動著Java的三駕馬車(Java SE、EE、ME)向前發(fā)展,嚴格的流程規(guī)范是確保Java技術(shù)高質(zhì)量、高兼容性的保證。隨著Apache基金會決裂的退出,隨著Spring家族的崛起,隨著Java EE的光芒越來越暗淡,正所謂眼看他起高樓,眼看他宴賓客,眼看他樓塌了,JCP組織影響力也在逐日減弱。
規(guī)范永遠屬于“一流技術(shù)”,作為一個Java程序員建議這是每個同學的必修課,因為它決定著自己的上限。而且這不僅僅是談資,而是實戰(zhàn)中切實會用到知識點。