Hibernate3和EJB3.0 Entity Bean
在向大家詳細介紹Hibernate之前,首先讓大家了解下Hibernate3,然后全面介紹EJB3.0 Entity Bean。
在Java世界,Hibernate是最引人關注的一個話題。從Gavin King加入EJB3.0 EG,負責制訂EJB3.0的持久層規范;到Gavin King非正式退出JDO EG,并且充滿個人情緒的攻擊JDO2.0規范;到《Hibernate in Action》的發行;再到Hibernate3 Alpha的發布;最后再到最近JBoss 3.0 PR的發布(使用Hibernate3實現Entity Bean)。可以說這其中的每一步都引起業界的側目。
Hibernate在不到3年的時間里,從一個不起眼的開源軟件發展到今天令業界矚目的主流O/R Mapping框架,Gavin King從一個開源軟件的作者成為業界舉足輕重的人物,這多少有些傳奇的色彩。畢竟,單純從技術成就而言,Hibernate不算是最有成就的Java開源框架軟件,到目前為止也不是一個完美無缺的軟件;從個人技術水平而言,Gavin King也不算絕頂高手。
在當前的Java持久層框架中,最流行的O/R Mapping產品分別是Hibernate,JDO和TopLink.
自從去年Gavin King加入JBoss之后,Hibernate已經由一個民間的開源軟件走上了兼容EJB Entity Bean的道路。然而更加令人側目的是,Gavin King在EJB3.0 EG中充當了一個非常重要的角色,只要對比一下EJB3.0 Entity Bean和Hibernate3,真相就會大白,雖然API接口不同,但是 Entity Bean的設計理念完全來自于Hibernate.
雖然EJB3.0 Entity Bean在相當程度上來源于Hibernate,但是畢竟是不同的API接口,因此Hibernate和EJB3.0 Entity Bean究竟是怎樣的一種關系,是很多人心中的疑問。
2004 年四月份JBoss的Ben Wang訪華期間,我曾經向Ben請教Hibernate的未來發展,他回答說,Hibernate未來將仍舊以獨立的軟件產品存在和發展,既可以 outside EJB container使用;同時Hibernate也將做為JBoss Entity Bean Implementation,又可以inside EJB container使用。然而如何既inside,又outside,終究缺乏一個感性的認識。
10月8日JBoss發布的 EJB3.0 PR揭開了答案。從Sourceforge的CVS服務器上面checkout出來源代碼看一下,我們可以發現,Gavin King對Hibernate3進行了簡單的封裝,將EJB3.0 Entity Bean API調用轉換為內部Hibernate3自己的API,從而實現EJB3.0 Entity Bean的兼容。
EJB3.0 不承諾脫離容器調用,如果你想享用EJB3.0,則必須運行在某個EJB Vendor提供的容器內,例如你使用JBoss提供的容器,那么你調用的是Entity Bean API,這些調用請求會被轉換為Hibernate API的調用請求。這意味著Hibernate實際上提供了兩套API:一套是Hibernate原生API;另一套是兼容EJB3.0 Entity Bean API.對于那些需要分布式調用支持,需要EJB容器的開發人員來說,他們選擇后一套API;對于不需要EJB容器的開發人員來說,他們選擇前一套 API.這就是Hibernate既定的發展策略。
【編輯推薦】