新聞中心
要學(xué)好Hibernate,首先要了解Hibernate架構(gòu),可能大家對Hibernate架構(gòu)還不太明白,沒有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會(huì)你。

成都創(chuàng)新互聯(lián)公司主營永安網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā)公司,永安h5小程序制作搭建,永安網(wǎng)站營銷推廣歡迎永安等地區(qū)企業(yè)咨詢
1. 架構(gòu)概況(Overview)
一個(gè)非常簡要的Hibernate架構(gòu)的概要圖:
從這個(gè)圖可以看出,Hibernater使用數(shù)據(jù)庫和配置信息來為應(yīng)用程序提供持久化服務(wù)(以及持久的對象)。
我們來更詳細(xì)地看一下運(yùn)行時(shí)Hibernate架構(gòu)。由于Hibernate非常靈活,且支持?jǐn)?shù)種應(yīng)用方案,所以我們這只描述一下兩種極端的情況?!拜p型”的架構(gòu)方案,要求應(yīng)用程序提供自己的JDBC 連接并管理自己的事務(wù)。這種方案使用了Hibernate API的最小子集:
“全面解決”的架構(gòu)方案,將應(yīng)用層從底層的JDBC/JTA API中抽象出來,而讓Hibernate來處理這些細(xì)節(jié)。
Heres some definitions of the objects in the diagrams: 圖中各個(gè)對象的定義如下:
SessionFactory (org.hibernate.SessionFactory)
針對單個(gè)數(shù)據(jù)庫映射關(guān)系經(jīng)過編譯后的內(nèi)存鏡像,它也是線程安全的(不可變)。 它是生成Session的工廠,本身要用到ConnectionProvider。 該對象可以在進(jìn)程或集群的級(jí)別上,為那些事務(wù)之間可以重用的數(shù)據(jù)提供可選的二級(jí)緩存。
Session (org.hibernate.Session)
表示應(yīng)用程序與持久儲(chǔ)存層之間交互操作的一個(gè)單線程對象,此對象生存期很短。 其隱藏了JDBC連接,也是Transaction的工廠。 其會(huì)持有一個(gè)針對持久化對象的必選(第一級(jí))緩存,在遍歷對象圖或者根據(jù)持久化標(biāo)識(shí)查找對象時(shí)會(huì)用到。
持久的對象及其集合
帶有持久化狀態(tài)的、具有業(yè)務(wù)功能的單線程對象,此對象生存期很短。 這些對象可以是普通的JavaBeans/POJO,唯一特殊的是他們正與(僅僅一個(gè))Session相關(guān)聯(lián)。 這個(gè)Session被關(guān)閉的同時(shí),這些對象也會(huì)脫離持久化狀態(tài),可以被應(yīng)用程序的任何層自由使用。 (例如,用作跟表示層打交道的數(shù)據(jù)傳輸對象data transfer object。)
瞬態(tài)(transient)以及脫管(detached)的對象及其集合
持久類的沒有與Session相關(guān)聯(lián)的實(shí)例。 他們可能是在被應(yīng)用程序?qū)嵗?,尚未進(jìn)行持久化的對象。 也可能是因?yàn)閷?shí)例化他們的Session已經(jīng)被關(guān)閉而脫離持久化的對象。
事務(wù)Transaction (org.hibernate.Transaction)
(可選的)應(yīng)用程序用來指定原子操作單元范圍的對象,它是單線程的,生存期很短。 它通過抽象將應(yīng)用從底層具體的JDBC、JTA以及CORBA事務(wù)隔離開。 某些情況下,一個(gè)Session之內(nèi)可能包含多個(gè)Transaction對象。 盡管是否使用該對象是可選的,但是事務(wù)邊界的開啟與關(guān)閉(無論是使用底層的API還是使用Transaction對象)是必不可少的。
ConnectionProvider (org.hibernate.connection.ConnectionProvider)
(可選的)生成JDBC連接的工廠(同時(shí)也起到連接池的作用)。 它通過抽象將應(yīng)用從底層的Datasource或DriverManager隔離開。 僅供開發(fā)者擴(kuò)展/實(shí)現(xiàn)用,并不暴露給應(yīng)用程序使用。
TransactionFactory (org.hibernate.TransactionFactory)
(可選的)生成Transaction對象實(shí)例的工廠。 僅供開發(fā)者擴(kuò)展/實(shí)現(xiàn)用,并不暴露給應(yīng)用程序使用。
擴(kuò)展接口
Hibernate提供了很多可選的擴(kuò)展接口,你可以通過實(shí)現(xiàn)它們來定制你的持久層的行為。 具體請參考API文檔。
在一個(gè)“輕型”的架構(gòu)中,應(yīng)用程序可能繞過 Transaction/TransactionFactory 以及 ConnectionProvider 等API直接跟JTA或JDBC打交道。
2. 實(shí)例狀態(tài)
一個(gè)持久化類的實(shí)例可能處于三種不同狀態(tài)中的某一種。 這三種狀態(tài)的定義則與所謂的持久化上下文(persistence context)有關(guān)。Hibernate的Session對象就是這個(gè)所謂的持久化上下文:
◆瞬態(tài)(transient)該實(shí)例從未與任何持久化上下文關(guān)聯(lián)過。它沒有持久化標(biāo)識(shí)(相當(dāng)于主鍵)。
◆持久(persistent) 實(shí)例目前與某個(gè)持久化上下文有關(guān)聯(lián)。 它擁有持久化標(biāo)識(shí)(相當(dāng)于主鍵),并且可能在數(shù)據(jù)庫中有一個(gè)對應(yīng)的行。 對于某一個(gè)特定的持久化上下文,Hibernate保證持久化標(biāo)識(shí)與Java標(biāo)識(shí)(其值代表對象在內(nèi)存中的位置)等價(jià)。
◆脫管(detached) 實(shí)例曾經(jīng)與某個(gè)持久化上下文發(fā)生過關(guān)聯(lián),不過那個(gè)上下文被關(guān)閉了, 或者這個(gè)實(shí)例是被序列化(serialize)到這個(gè)進(jìn)程來的。 它擁有持久化標(biāo)識(shí),并且在數(shù)據(jù)庫中可能存在一個(gè)對應(yīng)的行。 對于脫管狀態(tài)的實(shí)例,Hibernate不保證任何持久化標(biāo)識(shí)和Java標(biāo)識(shí)的關(guān)系。
3. JMX整合
JMX是管理Java組件(Java components)的J2EE規(guī)范。 Hibernate 可以通過一個(gè)JMX標(biāo)準(zhǔn)服務(wù)來管理。 在這個(gè)發(fā)行版本中,我們提供了一個(gè)MBean接口的實(shí)現(xiàn),即 org.hibernate.jmx.HibernateService。
想要看如何在JBoss應(yīng)用服務(wù)器上將Hibernate部署為一個(gè)JMX服務(wù)的例子,您可以參考JBoss用戶指南。 我們現(xiàn)在說一下在Jboss應(yīng)用服務(wù)器上,使用JMX來部署Hibernate的好處:
Session管理: Hibernate的Session對象的生命周期可以 自動(dòng)跟一個(gè)JTA事務(wù)邊界綁定。這意味著你無需手工開關(guān)Session了, 這項(xiàng) 工作會(huì)由JBoss EJB 攔截器來完成。你再也不用擔(dān)心你的代碼中的事務(wù)邊界了(除非你想利用Hibernate提供 的Transaction API來自己寫一個(gè)便于移植的的持久層)。 你現(xiàn)在要通過 HibernateContext來操作Session了。
HAR 部署: 通常情況下,你會(huì)使用JBoss的服務(wù)部署描述符(在EAR或/和SAR文件中)來部署Hibernate JMX服務(wù)。 這種部署方式支持所有常見的Hibernate SessionFactory的配置選項(xiàng)。 不過,你需在部署描述符中,列出你所有的映射文件的名字。如果你使用HAR部署方式, JBoss 會(huì)自動(dòng)探測出你的HAR文件中所有的映射文件。
這些選項(xiàng)更多的描述,請參考JBoss 應(yīng)用程序用戶指南。
將Hibernate以部署為JMX服務(wù)的另一個(gè)好處,是可以查看Hibernate的運(yùn)行時(shí)統(tǒng)計(jì)信息?!?Hibernate的統(tǒng)計(jì)(statistics)機(jī)制 ”.
4. 對JCA的支持
Hibernate也可以被配置為一個(gè)JCA連接器(JCA connector)。更多信息請參看網(wǎng)站。請注意,Hibernate對JCA的支持,仍處于實(shí)驗(yàn)性質(zhì)。
本文題目:詳述Hibernate架構(gòu)(Architecture)
鏈接地址:http://www.dlmjj.cn/article/cdidpdh.html


咨詢
建站咨詢
