自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳述Hibernate架構(gòu)(Architecture)

開發(fā) 后端
運(yùn)行時(shí)Hibernate架構(gòu),由于Hibernate非常靈活,且支持?jǐn)?shù)種應(yīng)用方案,所以我們這只描述一下兩種極端的情況。“輕型”的架構(gòu)方案,要求應(yīng)用程序提供自己的JDBC 連接并管理自己的事務(wù)

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

1. 架構(gòu)概況(Overview)

一個(gè)非常簡(jiǎn)要的Hibernate架構(gòu)的概要圖:

預(yù)覽圖片

從這個(gè)圖可以看出,Hibernater使用數(shù)據(jù)庫(kù)和配置信息來(lái)為應(yīng)用程序提供持久化服務(wù)(以及持久的對(duì)象)。

我們來(lái)更詳細(xì)地看一下運(yùn)行時(shí)Hibernate架構(gòu)。由于Hibernate非常靈活,且支持?jǐn)?shù)種應(yīng)用方案,所以我們這只描述一下兩種極端的情況?!拜p型”的架構(gòu)方案,要求應(yīng)用程序提供自己的JDBC 連接并管理自己的事務(wù)。這種方案使用了Hibernate API的最小子集:

預(yù)覽圖片

“全面解決”的架構(gòu)方案,將應(yīng)用層從底層的JDBC/JTA API中抽象出來(lái),而讓Hibernate來(lái)處理這些細(xì)節(jié)。

預(yù)覽圖片

Heres some definitions of the objects in the diagrams: 圖中各個(gè)對(duì)象的定義如下:

SessionFactory (org.hibernate.SessionFactory)
針對(duì)單個(gè)數(shù)據(jù)庫(kù)映射關(guān)系經(jīng)過(guò)編譯后的內(nèi)存鏡像,它也是線程安全的(不可變)。 它是生成Session的工廠,本身要用到ConnectionProvider。 該對(duì)象可以在進(jìn)程或集群的級(jí)別上,為那些事務(wù)之間可以重用的數(shù)據(jù)提供可選的二級(jí)緩存。

Session (org.hibernate.Session)
表示應(yīng)用程序與持久儲(chǔ)存層之間交互操作的一個(gè)單線程對(duì)象,此對(duì)象生存期很短。 其隱藏了JDBC連接,也是Transaction的工廠。 其會(huì)持有一個(gè)針對(duì)持久化對(duì)象的必選(第一級(jí))緩存,在遍歷對(duì)象圖或者根據(jù)持久化標(biāo)識(shí)查找對(duì)象時(shí)會(huì)用到。

持久的對(duì)象及其集合
帶有持久化狀態(tài)的、具有業(yè)務(wù)功能的單線程對(duì)象,此對(duì)象生存期很短。 這些對(duì)象可以是普通的JavaBeans/POJO,唯一特殊的是他們正與(僅僅一個(gè))Session相關(guān)聯(lián)。 這個(gè)Session被關(guān)閉的同時(shí),這些對(duì)象也會(huì)脫離持久化狀態(tài),可以被應(yīng)用程序的任何層自由使用。 (例如,用作跟表示層打交道的數(shù)據(jù)傳輸對(duì)象data transfer object。)

瞬態(tài)(transient)以及脫管(detached)的對(duì)象及其集合
持久類的沒(méi)有與Session相關(guān)聯(lián)的實(shí)例。 他們可能是在被應(yīng)用程序?qū)嵗?,尚未進(jìn)行持久化的對(duì)象。 也可能是因?yàn)閷?shí)例化他們的Session已經(jīng)被關(guān)閉而脫離持久化的對(duì)象。

事務(wù)Transaction (org.hibernate.Transaction)
(可選的)應(yīng)用程序用來(lái)指定原子操作單元范圍的對(duì)象,它是單線程的,生存期很短。 它通過(guò)抽象將應(yīng)用從底層具體的JDBC、JTA以及CORBA事務(wù)隔離開。 某些情況下,一個(gè)Session之內(nèi)可能包含多個(gè)Transaction對(duì)象。 盡管是否使用該對(duì)象是可選的,但是事務(wù)邊界的開啟與關(guān)閉(無(wú)論是使用底層的API還是使用Transaction對(duì)象)是必不可少的。

ConnectionProvider (org.hibernate.connection.ConnectionProvider)
(可選的)生成JDBC連接的工廠(同時(shí)也起到連接池的作用)。 它通過(guò)抽象將應(yīng)用從底層的Datasource或DriverManager隔離開。 僅供開發(fā)者擴(kuò)展/實(shí)現(xiàn)用,并不暴露給應(yīng)用程序使用。

TransactionFactory (org.hibernate.TransactionFactory)
(可選的)生成Transaction對(duì)象實(shí)例的工廠。 僅供開發(fā)者擴(kuò)展/實(shí)現(xiàn)用,并不暴露給應(yīng)用程序使用。

擴(kuò)展接口
Hibernate提供了很多可選的擴(kuò)展接口,你可以通過(guò)實(shí)現(xiàn)它們來(lái)定制你的持久層的行為。 具體請(qǐng)參考API文檔。


在一個(gè)“輕型”的架構(gòu)中,應(yīng)用程序可能繞過(guò) Transaction/TransactionFactory 以及 ConnectionProvider 等API直接跟JTA或JDBC打交道。

2. 實(shí)例狀態(tài)

一個(gè)持久化類的實(shí)例可能處于三種不同狀態(tài)中的某一種。 這三種狀態(tài)的定義則與所謂的持久化上下文(persistence context)有關(guān)。Hibernate的Session對(duì)象就是這個(gè)所謂的持久化上下文:

◆瞬態(tài)(transient)該實(shí)例從未與任何持久化上下文關(guān)聯(lián)過(guò)。它沒(méi)有持久化標(biāo)識(shí)(相當(dāng)于主鍵)。

◆持久(persistent) 實(shí)例目前與某個(gè)持久化上下文有關(guān)聯(lián)。 它擁有持久化標(biāo)識(shí)(相當(dāng)于主鍵),并且可能在數(shù)據(jù)庫(kù)中有一個(gè)對(duì)應(yīng)的行。 對(duì)于某一個(gè)特定的持久化上下文,Hibernate保證持久化標(biāo)識(shí)與Java標(biāo)識(shí)(其值代表對(duì)象在內(nèi)存中的位置)等價(jià)。

◆脫管(detached) 實(shí)例曾經(jīng)與某個(gè)持久化上下文發(fā)生過(guò)關(guān)聯(lián),不過(guò)那個(gè)上下文被關(guān)閉了, 或者這個(gè)實(shí)例是被序列化(serialize)到這個(gè)進(jìn)程來(lái)的。 它擁有持久化標(biāo)識(shí),并且在數(shù)據(jù)庫(kù)中可能存在一個(gè)對(duì)應(yīng)的行。 對(duì)于脫管狀態(tài)的實(shí)例,Hibernate不保證任何持久化標(biāo)識(shí)和Java標(biāo)識(shí)的關(guān)系。

3. JMX整合

JMX是管理Java組件(Java components)的J2EE規(guī)范。 Hibernate 可以通過(guò)一個(gè)JMX標(biāo)準(zhǔn)服務(wù)來(lái)管理。 在這個(gè)發(fā)行版本中,我們提供了一個(gè)MBean接口的實(shí)現(xiàn),即 org.hibernate.jmx.HibernateService。

想要看如何在JBoss應(yīng)用服務(wù)器上將Hibernate部署為一個(gè)JMX服務(wù)的例子,您可以參考JBoss用戶指南。 我們現(xiàn)在說(shuō)一下在Jboss應(yīng)用服務(wù)器上,使用JMX來(lái)部署Hibernate的好處:

Session管理: Hibernate的Session對(duì)象的生命周期可以 自動(dòng)跟一個(gè)JTA事務(wù)邊界綁定。這意味著你無(wú)需手工開關(guān)Session了, 這項(xiàng) 工作會(huì)由JBoss EJB 攔截器來(lái)完成。你再也不用擔(dān)心你的代碼中的事務(wù)邊界了(除非你想利用Hibernate提供 的Transaction API來(lái)自己寫一個(gè)便于移植的的持久層)。 你現(xiàn)在要通過(guò) HibernateContext來(lái)操作Session了。

HAR 部署: 通常情況下,你會(huì)使用JBoss的服務(wù)部署描述符(在EAR或/和SAR文件中)來(lái)部署Hibernate JMX服務(wù)。 這種部署方式支持所有常見(jiàn)的Hibernate SessionFactory的配置選項(xiàng)。 不過(guò),你需在部署描述符中,列出你所有的映射文件的名字。如果你使用HAR部署方式, JBoss 會(huì)自動(dòng)探測(cè)出你的HAR文件中所有的映射文件。

這些選項(xiàng)更多的描述,請(qǐng)參考JBoss 應(yīng)用程序用戶指南。

將Hibernate以部署為JMX服務(wù)的另一個(gè)好處,是可以查看Hibernate的運(yùn)行時(shí)統(tǒng)計(jì)信息?!?Hibernate的統(tǒng)計(jì)(statistics)機(jī)制 ”.

4. 對(duì)JCA的支持

Hibernate也可以被配置為一個(gè)JCA連接器(JCA connector)。更多信息請(qǐng)參看網(wǎng)站。請(qǐng)注意,Hibernate對(duì)JCA的支持,仍處于實(shí)驗(yàn)性質(zhì)。

【編輯推薦】

  1. 簡(jiǎn)述Hibernate中加載并存儲(chǔ)對(duì)象
  2. Hibernate傳播性持久化攻略
  3. 深入了解Hibernate自動(dòng)狀態(tài)檢測(cè)
  4. 教你如何在Hibernate中實(shí)例化集合和代理
  5. Hinerbate單端關(guān)聯(lián)代理頗析
責(zé)任編輯:仲衡 來(lái)源: redsaga
相關(guān)推薦

2009-06-02 14:24:32

Hibernate單元測(cè)試HSQLDB

2015-05-25 13:44:42

微服務(wù)微服務(wù)架構(gòu)Docker

2009-09-21 12:50:34

Hibernate架構(gòu)

2023-07-19 10:09:18

架構(gòu)倉(cāng)庫(kù)SSD

2022-11-29 20:32:07

2010-07-12 14:41:35

UDP協(xié)議

2010-09-26 14:16:26

DHCP協(xié)議應(yīng)用

2010-09-01 17:11:01

DHCP中繼代理

2010-05-06 15:00:58

集群負(fù)載均衡

2010-05-07 14:27:16

IPVS負(fù)載均衡

2015-07-08 14:18:44

可擴(kuò)展架構(gòu)設(shè)計(jì)云計(jì)算

2023-10-09 08:20:12

整潔架構(gòu)軟件設(shè)計(jì)原則

2013-05-28 11:04:42

Android開發(fā)Android編譯源碼編譯

2011-08-22 15:03:17

nagios

2010-02-07 09:52:22

Android 插件

2011-08-25 15:40:52

MPLS LDP協(xié)議LSRLDP

2011-08-25 11:52:35

2010-03-08 18:18:38

Linux后臺(tái)運(yùn)行命令

2010-03-09 08:54:29

Linux后臺(tái)運(yùn)行命令

2010-03-09 09:40:02

Linux后臺(tái)運(yùn)行命令
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)