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