EJB的發展曆史
轉自:http://book.51cto.com/art/201008/220992.htm
8.1.2 EJB的發展曆史
http://book.51cto.com 2010-08-21 17:25 李剛 電子工業出版社 我要評論(0)
摘要:《經典Java EE企業應用實戰:基于WebLogic/JBoss的JSF+EJB 3+JPA整合開發》第8章會話EJB,更新之後的EJB 3規範對開發者來說具有簡單、易用的特征,正是因為這種勇于自我革新的精神,使得EJB 3規範重新煥發出新的魅力。本小節為大家介紹EJB的發展曆史。
标簽:EJB Java EE WebLogic JSF+EJB 3+JPA 經典Java EE企業應用實戰
8.1.2 EJB的發展曆史
對于EJB這種備受争議卻又充滿傳奇色彩的技術,我們将再次回顧它從輝煌出場,經曆黯然衰敗,直到今天再次輝煌的發展輪回。
(1)EJB 1.0
最初的EJB 1.0大約于1998年釋出,最初的規範隻包含有狀态的和無狀态的兩種伺服器對象(後來統稱為有狀态的會話Bean和無狀态的會話Bean),以及可選的持久化領域對象(後來稱為實體Bean),EJB 1.0就已經提供了良好的分布式支援功能:它允許通過遠端接口來遠端調用EJB中的業務方法。
EJB 1.0規範試圖簡化RMI的遠端通路程式設計,但EJB 1.0規範卻引入了新的煩瑣,開發編寫一個EJB更難了,甚至比直接用RMI更複雜。但無論如何,EJB 1.0的遠端通路支援還是吸引了大量廠商的眼球,立即成為當時最大的熱門技術。
但EJB 1.0也有一個考慮不全的地方,它過早地估計網絡就是計算機,它強制客戶機元件總以遠端通路的方式來調用EJB的方法,對于一些不需要遠端通路支援的系統來說,EJB 1.0的遠端通路支援就變成了一種累贅:它會加大系統開銷,影響性能。
(2)EJB 1.1
EJB 1.1與EJB 1.0的差別在于EJB 1.1正式支援實體Bean,實體Bean成為EJB核心規範之一,實體Bean既是當年Sun公司寄予厚望的持久化解決方案,也是導緻EJB飽受罵名的重要原因。除此之外,EJB 1.1引入了XML格式的部署描述檔案,使用XML配置檔案以聲明式的方式來管理EJB部署資訊。
EJB引入XML配置檔案時大概是XML最風光的時候,大量的技術實作、架構都打算采用XML來作為配置檔案,将以"寫死"方式寫在程式代碼中的資訊提取到XML配置檔案中成了一種潮流。再後來,Annotation出現了,大部分技術、架構又放棄了XML配置檔案,改為使用Annotation來管理配置資訊。
(3)EJB 2.0
EJB 2.0解決了EJB 1.0中強制遠端通路支援帶來的系統開銷和性能下降問題,EJB 2.0規範引入了本地接口的概念,它允許開發者自己決定是否要讓EJB元件支援遠端通路,如果EJB元件不需要支援遠端通路,讓Bean實作類實作本地接口即可,這就可以避免遠端通路支援帶來的系統開銷和性能下降。
EJB 2.0增強了實體Bean的功能,它為CMP(容器管理持久化)的EJB提供了容器管理關系(CMR)的支援,允許開發者通過配置檔案來管理EJB之間的關聯關系。而且還引入了EJB查詢語言:EJB-QL,EJB-QL正式為實體Bean提供了查詢支援。不幸的是,EJB-QL的功能似乎不如原生SQL強大,往往對開發者形成某種制約。
EJB 2.0規範的另一個亮點是:消息驅動Bean(MDB),消息驅動Bean本質上與無狀态的會話Bean相同。隻是它無須遠端接口,是以它不能被客戶機調用。但客戶機元件可通過向消息目的發送消息來觸發MDB的onMessage方法。
(4)EJB 2.1
EJB 2.1增加了Web Service支援,增加Web Service支援後的EJB更有利于異構系統的整合。不僅如此,EJB 2.1還增加了計時器服務,允許按指定時間或固定間隔來調用EJB的業務方法,計時器服務可以非常友善地為系統提供任務排程的支援。
除此之外,EJB 2.1增強了EJB-QL的功能,進而提供了更強大的查詢支援。雖然EJB 2.1在努力改進EJB-QL查詢功能,但大家對EJB 2的罵聲掩蓋了Sun在EJB-QL上的努力。
(5)EJB 3.0
EJB 3完全抛棄了EJB 2實體Bean的設計,僅僅保留原有的Session Bean和消息驅動Bean,這展現了EJB 3自我革新的巨大勇氣。EJB 3引進了全新的JPA規範作為持久化解決方案--也許這個說法有一定的問題,因為JPA被定義成一種獨立的持久化API,它甚至已經不再屬于EJB 3規範。
EJB 3再次簡化了EJB 2中Session Bean的開發,Session Bean不再需要Home接口,EJB 3規範隻要求提供遠端或本地的業務接口即可。而且EJB 3不再推薦使用XML檔案作為部署描述檔案,而是改為使用Annotation來設定部署描述資訊,進一步簡化了EJB元件的開發過程。
總之,EJB 3.0是EJB曆史上最重要的版本之一,EJB 3.0使得經典Java EE技術重回開發主流,讓越來越多的人願意選擇以EJB 3為核心的Java EE來開發企業級應用。
(6)EJB 3.1
筆者成書之時,EJB 3.1規範已經作為Java EE 6規範的一部分被釋出。由于EJB 3.1規範剛剛釋出不久,是以支援EJB 3.1的應用伺服器并不多見,但EJB 3.1宣稱進一步簡化了EJB 3.0的開發過程,例如,EJB 3.1允許企業Bean隻提供一個Bean類,甚至無須提供業務接口;允許通過異步的方式來調用Session Bean的業務方法;簡化了EJB的類檔案必須打包到JAR檔案中的限制,允許直接将EJB類放到WAR檔案中。
相信不久各應用伺服器廠商馬上就會推出支援EJB 3.1規範的伺服器,而EJB 3.1也會比EJB 3.0更深入人心。
現在Java EE應用架構已經形成兩種主流的技術架構:一種是以EJB為核心,前端以JSF為MVC架構的技術架構,這種技術架構以Sun提倡的官方Java EE技術為主;另一種則是以Spring+Hibernate為核心,前端以Struts 1或Struts 2為MVC架構的技術架構,這種技術架構以主流的開源架構為主。筆者把前者稱為經典Java EE,把後者稱為輕量級Java EE。