<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 66,  comments - 11,  trackbacks - 0

        實(shí)體Bean是持久化對(duì)象,它能夠存儲(chǔ)到持久化存儲(chǔ)源中。實(shí)體Bean是EJB編程模型中最為重要的利器之一。
        將對(duì)象映射到RDBMS的技術(shù)稱之為對(duì)象-關(guān)系映射。它能夠?qū)崿F(xiàn)內(nèi)存對(duì)象同關(guān)系數(shù)據(jù)的相互轉(zhuǎn)換。O/R映射器能夠?qū)ava對(duì)象映射到任意RDBMS模式。比如簡(jiǎn)單的O/RMapping引擎能夠?qū)ava類映射成SQL表定義。Java語(yǔ)言提供的對(duì)象序列化功能比O/RMapping簡(jiǎn)單多了。O/RMapping是更加復(fù)雜、成熟的對(duì)象持久化機(jī)制。通過(guò)將Java對(duì)象分解成關(guān)系數(shù)據(jù),應(yīng)用便能夠查找到所需的數(shù)據(jù)了。
        通過(guò)如下兩種方式能夠完成Java對(duì)象到關(guān)系數(shù)據(jù)的映射。其一,通過(guò)硬編碼實(shí)現(xiàn)O/RMapping.其二,借助于O/RMapping產(chǎn)品,自動(dòng)完成映射過(guò)程,比如:Hibernate.
        對(duì)于任何成熟的、基于OO多層部署的企業(yè)應(yīng)用而言,總可以劃分出2種截然不同的組件類型。1、應(yīng)用邏輯組件,2、持久化數(shù)據(jù)組件。會(huì)話Bean和實(shí)體Bean的最大區(qū)別在于實(shí)體Bean是實(shí)體,客戶是可以看的到的。因此實(shí)體Bean能夠獨(dú)立于客戶應(yīng)用的生命周期。對(duì)于實(shí)體Bean而言,通過(guò)比較它們各自含有的數(shù)據(jù)便能夠區(qū)分不同的實(shí)體Bean.這意味著客戶能夠引用單個(gè)的實(shí)體Bean實(shí)例并將它傳入到其他應(yīng)用中,不同的客戶可以共享同樣的實(shí)體Bean實(shí)例,這對(duì)于會(huì)話Bean是辦不到的。會(huì)話Bean建模過(guò)程或者工作流。實(shí)體Bean本身就是客戶,它就是持久化狀態(tài)對(duì)象。
        實(shí)體Bean實(shí)例存在幾方面的含義:
    1、持久化數(shù)據(jù)的Java表示,即它能夠從持久化存儲(chǔ)源裝載數(shù)據(jù)到內(nèi)存中。同時(shí),實(shí)體Bean實(shí)例能夠?qū)⒀b載到的數(shù)據(jù)存儲(chǔ)到實(shí)例的成員變量中。
    2、通過(guò)修改內(nèi)存中的Java對(duì)象可以改變數(shù)據(jù)的取值。
    3、還可以將修改后的數(shù)據(jù)保存到存儲(chǔ)源匯中,從而更新RDBMS中的物理數(shù)據(jù)。
        實(shí)體Bean是持久化對(duì)象,它能夠長(zhǎng)期存在。即使出現(xiàn)了不可恢復(fù)的失敗,比如應(yīng)用服務(wù)器癱瘓、數(shù)據(jù)庫(kù)癱瘓,實(shí)體Bean還是能夠存活的。原因在于實(shí)體Bean只是對(duì)底層具有容錯(cuò)行為的持久化存儲(chǔ)源中數(shù)據(jù)的映射,因此,即使極其癱瘓,內(nèi)存中的實(shí)體Bean實(shí)例還可以重新構(gòu)建。在極其重啟后,實(shí)體Bean實(shí)例需要從底層存儲(chǔ)源裝載數(shù)據(jù),并使用獲得的數(shù)據(jù)對(duì)實(shí)體Bean實(shí)例中的各個(gè)域進(jìn)行setter操作。實(shí)體Bean比客戶會(huì)話的生命周期要長(zhǎng)。可以認(rèn)為,數(shù)據(jù)庫(kù)中記錄存活的時(shí)間決定了實(shí)體Bean實(shí)例的生命周期。
        相同數(shù)據(jù)往往存在多分物理拷貝,比如內(nèi)存中的實(shí)體Bean實(shí)例、實(shí)體Bean數(shù)據(jù)本身,他們都是對(duì)RDBMS中數(shù)據(jù)的拷貝。因此,EJB容器需要提供某種機(jī)制實(shí)現(xiàn)數(shù)據(jù)在Java對(duì)象和RDBMS間的自動(dòng)傳輸。實(shí)體Bean的Bean類為此提供了2個(gè)特殊方法:
    ejbLoad():它能夠從持久化存儲(chǔ)源中讀取數(shù)據(jù),并存儲(chǔ)到實(shí)體Bean實(shí)例的域中。
    ejbStore():它能夠?qū)?dāng)前實(shí)體Bean實(shí)例的域值保存到底層RDBMS中。
    那么何時(shí)需要完成內(nèi)存中實(shí)體Bean實(shí)例和RDBMS中數(shù)據(jù)的傳遞和轉(zhuǎn)換,開(kāi)發(fā)者需要知道是誰(shuí)調(diào)用了ejbLoad()和ejbStore(),答案是EJB容器。它們是回調(diào)方法,供EJB容器調(diào)用。EJB規(guī)范要求所有的實(shí)體Bean組件必須提供它們。至于讀取或存儲(chǔ)數(shù)據(jù)的時(shí)機(jī),由EJB容器決定。依據(jù)實(shí)體Bean實(shí)例當(dāng)前的事務(wù)狀態(tài),EJB容器會(huì)自動(dòng)計(jì)算出需要調(diào)用實(shí)體Bean實(shí)例中的ejbLoad(),ejbStore()方法的時(shí)機(jī),這也是使用實(shí)體Bean組件的優(yōu)勢(shì)之一:開(kāi)發(fā)者不用考慮java對(duì)象同步底層RDBMS的問(wèn)題。

        為了滿足大量并發(fā)客戶訪問(wèn)同一數(shù)據(jù)的要求,架構(gòu)師需要借助于實(shí)體Bean設(shè)計(jì)出高性能的訪問(wèn)系統(tǒng)。如下給出一種解決方案:允許多個(gè)客戶共享同一實(shí)體Bean實(shí)例。因此,實(shí)體Bean實(shí)例能夠同時(shí)服務(wù)多個(gè)客戶。盡管表面上看是可行的,但是對(duì)于EJB而言,這是行不通的。原因有亮點(diǎn):其一,為實(shí)現(xiàn)實(shí)體Bean實(shí)例服務(wù)多個(gè)并發(fā)客戶,必須保證實(shí)體Bean實(shí)例是線程安全的,開(kāi)發(fā)線程安全的代碼并不是一件容易的工作,而且經(jīng)常會(huì)出現(xiàn)一堆錯(cuò)我。其二,底層事務(wù)系統(tǒng)幾乎不可能控制多個(gè)線程的并發(fā)執(zhí)行,事務(wù)往往同具體的線程綁定在一起。因此,基于上述理由,單個(gè)實(shí)體Bean實(shí)例只能夠在單線程環(huán)境中運(yùn)行。對(duì)于所有的EJB組件而言,包括會(huì)話Bean、消息驅(qū)動(dòng)Bean、實(shí)體Bean,它們都是以單線程方式運(yùn)行的。
        當(dāng)然,強(qiáng)制要求各個(gè)實(shí)體Bean實(shí)例只能同時(shí)服務(wù)單個(gè)客戶,將引入性能瓶頸。由于實(shí)例以單線程方式運(yùn)行,客戶需要排隊(duì)等候?qū)嶓wBean實(shí)例,從而獲得對(duì)實(shí)體Bean實(shí)例的調(diào)用,這對(duì)于大型企業(yè)應(yīng)用而言,是不允許出現(xiàn)的
        為了提供系統(tǒng)性能,EJB容器會(huì)實(shí)例化同一實(shí)體Bean的多個(gè)實(shí)例。這使得多個(gè)客戶能夠并發(fā)同不同實(shí)體Bean實(shí)例進(jìn)行交互,而這些實(shí)體Bean實(shí)例代表了同一RDBMS數(shù)據(jù)。事實(shí)上,這就是EJB容器的運(yùn)行行為。因此,客戶再也不用排隊(duì)等候?qū)嶓wBean實(shí)例,因?yàn)榇嬖诙鄠€(gè)實(shí)體Bean實(shí)例了。
        一旦多個(gè)實(shí)體Bean實(shí)例代表了同一RDBMS數(shù)據(jù),則引入了另外一個(gè)問(wèn)題:數(shù)據(jù)癱瘓。如果多個(gè)實(shí)體Bean實(shí)例代表的數(shù)據(jù)是通過(guò)緩存管理的,則需要在內(nèi)存中拷貝多分緩存中的數(shù)據(jù)。顯然,某些緩存中的數(shù)據(jù)將變得陳舊,因此會(huì)出現(xiàn)很多過(guò)期的數(shù)據(jù)。
        為了實(shí)現(xiàn)實(shí)體Bean實(shí)例的緩存一致性,各個(gè)實(shí)體Bean實(shí)例必須同底層存儲(chǔ)元進(jìn)行同步。EJB容器將通過(guò)調(diào)用ejbLoad(),ejbStore()方法同步這些實(shí)體Bean實(shí)例。
        至于實(shí)體Bean實(shí)例同底層RDBMS數(shù)據(jù)的同步頻率,則取決于事務(wù)。事務(wù)將各個(gè)客戶請(qǐng)求隔離起來(lái)。借助于事務(wù)實(shí)現(xiàn)數(shù)據(jù)同步。

        EJB容器提供的實(shí)例池是很有意義的。當(dāng)然,并不是只有實(shí)體Bean才存在實(shí)例池。在將實(shí)體Bean實(shí)例重新分配給不同EJB對(duì)象時(shí),會(huì)存在一些問(wèn)題,并要求容器去解決。比如當(dāng)實(shí)體Bean實(shí)例被指定給EJB對(duì)象時(shí),它可能還持有資源(比如Socket連接)。如果將實(shí)體Bean實(shí)例放置在實(shí)例池中,Socket連接不在需要。因此為實(shí)現(xiàn)資源的獲取和釋放,實(shí)體Bean的Bean類需要實(shí)現(xiàn)如下2個(gè)回調(diào)方法:
    1、ejbActivate().在將實(shí)體Bean實(shí)例從實(shí)例池中取出來(lái)時(shí),EJB容器會(huì)自動(dòng)調(diào)用它。該過(guò)程稱之為激活。進(jìn)而,EJB容器會(huì)將實(shí)體Bean實(shí)例分配給某EJB對(duì)象,并同時(shí)獲得主鍵對(duì)象。在執(zhí)行ejbActivate()方法期間,實(shí)例需要獲得所需的資源,比如Socke,否則,在將實(shí)體Bean實(shí)例分配給某EJB對(duì)象時(shí),無(wú)法對(duì)資源進(jìn)行操作。
    2、ejbPassivate().在將實(shí)體Bean實(shí)例放置到實(shí)例池中時(shí),EJB容器會(huì)調(diào)用它。注意,它也是回調(diào)方法。這一過(guò)程稱之為掛起。進(jìn)而,EJB容器需要從某EJB對(duì)象中取回分配于它的實(shí)體Bean實(shí)例,并將實(shí)例的主鍵對(duì)象也收回。在執(zhí)行ejbPassivate()方法期間,需要釋放ejbActivate()執(zhí)行期間獲得的相關(guān)資源,比如:Socket.
        一旦實(shí)體Bean實(shí)例被掛起,不但要釋放它持有的資源,還將實(shí)例的狀態(tài)信息保存起來(lái)。因此,實(shí)體Bean實(shí)例最新的狀態(tài)信息可以從RDBMS中找到了。為了保存實(shí)體Bean實(shí)例的域信息到RDBMS中,容器要在掛起實(shí)例前調(diào)用ejbStore()方法。類似的,一旦實(shí)體Bean被激活,不但要獲得所需的資源,還要從RDBMS裝載最新的數(shù)據(jù),為了完成數(shù)據(jù)的讀取,EJB容器將在激活實(shí)體Bean實(shí)例后調(diào)用ejbLoad()方法。


     

    posted on 2009-11-15 11:46 王永慶 閱讀(291) 評(píng)論(0)  編輯  收藏 所屬分類: EJB學(xué)習(xí)筆記
    <2009年11月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    關(guān)注blogs

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产人成网在线播放VA免费| 伊人久久综在合线亚洲2019| 国产小视频在线观看免费| 99re热免费精品视频观看| **实干一级毛片aa免费| 99视频精品全部免费观看| 日本免费人成网ww555在线| 免费观看在线禁片| 99精品国产成人a∨免费看| 19禁啪啪无遮挡免费网站| 久久午夜夜伦鲁鲁片免费无码影视| 91福利免费视频| 性短视频在线观看免费不卡流畅| 亚洲一区在线免费观看| 一个人看www在线高清免费看| 欧美男同gv免费网站观看 | 亚洲国产一区二区三区在线观看| 亚洲中文字幕日本无线码| 亚洲乱亚洲乱妇24p| 成a人片亚洲日本久久| 免费无码婬片aaa直播表情| 成人免费a级毛片| 女人18毛片水最多免费观看| 国产免费卡一卡三卡乱码| 亚洲中文字幕视频国产| 亚洲精品无码专区久久久| 内射干少妇亚洲69XXX| 亚洲av午夜精品无码专区| 亚洲AV成人无码网站| 一级毛片无遮挡免费全部| 亚洲免费观看视频| A在线观看免费网站大全| 国产精品成人无码免费| 在线A亚洲老鸭窝天堂| 亚洲福利秒拍一区二区| 欧洲亚洲国产精华液| 国产免费A∨在线播放| 精品香蕉在线观看免费| 国产一卡二卡≡卡四卡免费乱码| 亚洲精品成人网站在线观看| 亚洲成年人电影在线观看|