在Java世界
Hibernate是最引人關注的一個話題
從Gavin King加入EJB
EG
負責制訂EJB
的持久層規范
到Gavin King非正式退出JDO EG
並且充滿個人情緒的攻擊JDO
規范
到《Hibernate in Action》的發行
再到Hibernate
Alpha的發布
最後再到最近JBoss
PR的發布(使用Hibernate
實現Entity Bean)
可以說這其中的每一步都引起業界的側目
Hibernate在不到
年的時間裡
從一個不起眼的開源軟件發展到今天令業界矚目的主流O/R Mapping框架
Gavin King從一個開源軟件的作者成為業界舉足輕重的人物
這多少有些傳奇的色彩
畢竟
單純從技術成就而言
Hibernate不算是最有成就的Java開源框架軟件
到目前為止也不是一個完美無缺的軟件
從個人技術水平而言
Gavin King也不算絕頂高手
在當前的Java持久層框架中
最流行的O/R Mapping產品分別是Hibernate
JDO和TopLink
自從去年Gavin King加入JBoss之後
Hibernate已經由一個民間的開源軟件走上了兼容EJB EntityBean的道路
然而更加令人側目的是
Gavin King在EJB
EG中充當了一個非常重要的角色
只要對比一下EJB
的EntityBean和Hibernate
真相就會大白
雖然API接口不同
但是 EntityBean的設計理念完全來自於Hibernate
雖然EJB
的EntityBean在相當程度上來源於Hibernate
但是畢竟是不同的API接口
因此Hibernate和EJB
EntityBean究竟是怎樣的一種關系
是很多人心中的疑問
年四月份JBoss的Ben Wang訪華期間
我曾經向Ben請教Hibernate的未來發展
他回答說
Hibernate未來將仍舊以獨立的軟件產品存在和發展
既可以 outside EJB container使用
同時Hibernate也將做為JBoss EntityBean Implementation
又可以inside EJB container使用
然而如何既inside
又outside
終究缺乏一個感性的認識
月
日JBoss發布的 EJB
PR揭開了答案
從Sourceforge的CVS服務器上面checkout出來源代碼看一下
我們可以發現
Gavin King對Hibernate
進行了簡單的封裝
將EJB
EntityBean API調用轉換為內部Hibernate
自己的API
從而實現EJB
EntityBean的兼容
EJB
不承諾脫離容器調用
如果你想享用EJB
則必須運行在某個EJB Vendor提供的容器內
例如你使用JBoss提供的容器
那麼你調用的是EntityBean API
這些調用請求會被轉換為Hibernate API的調用請求
這意味著Hibernate實際上提供了兩套API
一套是Hibernate原生API
另一套是兼容EJB
EntityBean API
對於那些需要分布式調用支持
需要EJB容器的開發人員來說
他們選擇後一套API
對於不需要EJB容器的開發人員來說
他們選擇前一套 API
這就是Hibernate既定的發展策略
今年夏天投票通過的JDO
標准從某種程度而言
並不遜色於 Hibernate當前的版本
有些功能甚至比Hibernate還要好
例如 JDO支持對類屬性的lazy loading
而Hibernate要到
才支持
當前Hibernate僅僅支持類的lazy loading
實際上在去年
就已經有很多用戶不斷提出對類屬性的lazy loading的需求
然而Gavin King當時一直不認為這個需求有添加的必要性
再例如被Gavin King形容為
可憎的
JDOQL
實際上是類SQL查詢語言和對象條件查詢的混合體
從功能上來說
不如HQL強大
但是比Hibernate自己的條件查詢強
不知道究竟出於什麼原因
Gavin King對JDO似乎一直懷有由衷的厭惡
月
他在Hibernate的blog上面對JDO進行了毫不留情的批判
列舉了JDO的種種缺點來解釋為什麼EJB
持久層規范沒有把JDO考慮進去
然而事實上他的批判充滿了對JDO的誤解和偏見
例如Gavin King憎恨JDOQL絲毫沒有什麼特別的理由
只因為JDOQL不是一個純粹的查詢語言
而是一個混合體
這多少讓人對Gavin King的風度感到遺憾
在被SolarMetric的Abe White反駁之後
同樣沒有風度的說
我可沒有時間做這種無謂的爭論
事實上每個人都認為他自己的技術是最好的……我是錯了
JDO那伙人也錯了
每個人都會犯錯誤……
(所以說人無完人!)
JDO
規范的出台事實上構成了對Hibernate
乃至基於 Hibernate理念的EJB
EntityBean的嚴重威脅
JDO
規范在功能上的嚴重缺失導致了JDO無力面對Hibernate和TopLink的競爭
然而功能基本完備的JDO
挾眾多JDO Vendor商業支持的合力
同時JDO規范可以避免產品鎖定在某個Vendor的優勢
已經將競爭的天平拉直
[] []
From:http://tw.wingwit.com/Article/program/Java/ky/201311/29133.html