來(lái)源:
http://java.chinaitlab.com/EJB/356292.html
EJB 3.0極其重視開(kāi)發(fā)的簡(jiǎn)易性,并調(diào)整了模型。這絕非巧合,因?yàn)橐?guī)范的主要設(shè)計(jì)者:Linda DeMichiel選擇了廣泛聽(tīng)取外界的意見(jiàn),并借鑒TopLink等產(chǎn)品所取得的經(jīng)驗(yàn)。這樣一來(lái),這項(xiàng)規(guī)范就可以沿著已經(jīng)由流行、得到公認(rèn)的技術(shù)開(kāi)辟出來(lái)的道路前進(jìn),而這些道路實(shí)際上成了業(yè)內(nèi)事實(shí)上的最佳實(shí)踐。
那么,作為程序員的你,面對(duì)新的規(guī)范,該做哪些準(zhǔn)備呢?
處理好架構(gòu)問(wèn)題
首先要確保你的架構(gòu)可以利用持久性方面的標(biāo)準(zhǔn)及認(rèn)可的設(shè)計(jì)模式。實(shí)際上,這可能需要改動(dòng)你的應(yīng)用程序,不過(guò)如果你期望應(yīng)用程序能經(jīng)得起時(shí)間的考驗(yàn),那么進(jìn)行這種投入是值得的。使用會(huì)話外觀、數(shù)據(jù)訪問(wèn)對(duì)象(DAO)層或者服務(wù)層總是好主意,不過(guò)在這里它們都至關(guān)重要。如果你的應(yīng)用程序已經(jīng)使用遠(yuǎn)程實(shí)體構(gòu)建而成——雖然這種做法并不常見(jiàn),那么就需要重新設(shè)計(jì)架構(gòu)。訪問(wèn)持久性對(duì)象之前,應(yīng)當(dāng)先部署可遠(yuǎn)程化服務(wù)層。如果要使用實(shí)體,它就應(yīng)當(dāng)完全是本地實(shí)體。
不過(guò),使用本地實(shí)體不是目的,因?yàn)閷?shí)體還為部署人員提供了為實(shí)體聲明事務(wù)和安全需求的功能。EJB 3.0不允許任何這些屬性在實(shí)體層面進(jìn)行設(shè)定。相反,實(shí)體的運(yùn)行環(huán)境將由調(diào)用者來(lái)確定,所以所需的任何事務(wù)或者安全環(huán)境將由負(fù)責(zé)封閉的J2EE組件來(lái)安裝或者聲明。
CMP應(yīng)用程序
如果你已經(jīng)是容器管理持久性(CMP)用戶,那么你可能迫不及待地想獲得新特性,希望拋棄無(wú)關(guān)的接口、不必要的bean代碼以及繁瑣的XML部署描述符,這些是與以前的實(shí)體bean開(kāi)發(fā)相關(guān)的一些煩人問(wèn)題。分別要擴(kuò)展EJBObject和EJBLocalObject的遠(yuǎn)程和本地接口再也不需要了;現(xiàn)在實(shí)體只要實(shí)現(xiàn)普通Java接口(POJI)即可,如果它們選擇這么做的話。
其次,你可能在想如何更容易地在容器中部署EJB,或者甚至根本不用部署,而是在獨(dú)立環(huán)境中的容器外面進(jìn)行測(cè)試。因?yàn)閷?shí)體是具體的普通Java對(duì)象(POJO),你就可以像一直以來(lái)創(chuàng)建Java對(duì)象的方式那樣,即使用new()來(lái)創(chuàng)建。
POJO應(yīng)用程序
可以通過(guò)實(shí)體管理器(EntityManager)訪問(wèn)大部分新的持久性API。實(shí)體管理器可以注入到會(huì)話bean里面,或者用Java命名和目錄接口(JNDI)進(jìn)行查詢。實(shí)體管理器代表事務(wù)的持久性上下文。一旦發(fā)現(xiàn)操作單元或者實(shí)體管理器管理的對(duì)象在事務(wù)結(jié)束后“很臟”,就會(huì)被寫(xiě)到外面的數(shù)據(jù)存儲(chǔ)區(qū)。
應(yīng)用程序可以通過(guò)抽取含有操作單元/會(huì)話工件(artifact)的代碼,讓自己不受全面變化的影響。這樣一來(lái),就可以通過(guò)可插入方式來(lái)獲得所用的實(shí)際會(huì)話。定義會(huì)話、然后允許包圍層把它與外界隔離開(kāi)來(lái),這類似EJB 3.0容器所采用的依賴注入范例(dependency injection paradigm)。應(yīng)用程序中使用的所有資源應(yīng)當(dāng)采用這種模式。在EJB 3.0中,標(biāo)準(zhǔn)資源將由應(yīng)用程序聲明,隨后在運(yùn)行時(shí)被注入到bean里面。
采用標(biāo)準(zhǔn)特性
EJB 3.0的許多特性可以在TopLink存在已久的特性當(dāng)中找到影子。只要使用這些特性,你就能夠擁有EJB 3.0的功能,雖然API還沒(méi)有完成。
查詢就是這樣一個(gè)方面,你現(xiàn)在可以開(kāi)始使用EJB 3.0的特性。EJB 3.0查詢可以從實(shí)體管理器獲得,并且可以在上面執(zhí)行。可以在你需要直接查詢SLQ、并通過(guò)查詢返回對(duì)象的少數(shù)情況下,創(chuàng)建本地SQL查詢。
查詢語(yǔ)言往往是造成遷移問(wèn)題的根源,因?yàn)椴痪帉?xiě)實(shí)質(zhì)性或者窮舉性的轉(zhuǎn)換分析工具,就很難實(shí)現(xiàn)自動(dòng)轉(zhuǎn)換。EJB查詢語(yǔ)言這種合理、有效的方法可對(duì)關(guān)系查詢語(yǔ)言進(jìn)行抽象處理,將受益于新增的幾項(xiàng)特性。現(xiàn)有的EJB查詢語(yǔ)言仍可以適用,不過(guò)EJB查詢語(yǔ)言方面的更多構(gòu)件和功能將進(jìn)一步改進(jìn)查詢語(yǔ)言。使用EJB查詢語(yǔ)言編寫(xiě)查詢將是明智之舉,因?yàn)椴樵冋Z(yǔ)言不會(huì)出現(xiàn)重大改變,除了功能上有所添加外。
繼承
EJB 2.1從來(lái)沒(méi)有指定真正的、自然的繼承。實(shí)際上,只有在廠商不設(shè)置障礙的情況下才有可能實(shí)現(xiàn)繼承,不過(guò)仍很難定義及管理。EJB 3.0卻不會(huì)這樣。由于具體的Java對(duì)象能夠彼此繼承,也用不著定義約束繼承范圍的方法,所以你能夠創(chuàng)建任意深度及廣度的實(shí)體繼承層次。
目前可以通過(guò)TopLink Mapping Workbench或JDeveloper、映射Java對(duì)象的GUI工具以及用于映射對(duì)象的基于Java的API,獲得同樣的這種靈活性。現(xiàn)在你可以創(chuàng)建域模型(domain model),以遵守適合你應(yīng)用程序的繼承策略,而不必等規(guī)范發(fā)布。
樂(lè)觀鎖定
TopLink支持的樂(lè)觀鎖定(optimistic locking)模型現(xiàn)在將被采用到EJB 3.0模型里面。這種機(jī)制對(duì)應(yīng)用程序非常有用,不僅僅是因?yàn)樵谧x/寫(xiě)訪問(wèn)比通常為90:10的情況下,它可以大大提高性能;還因?yàn)樗兄讷@得現(xiàn)代系統(tǒng)所需的那種可擴(kuò)展架構(gòu)。業(yè)界的眾多應(yīng)用程序使用這種主要的鎖定范例,來(lái)獲得Web應(yīng)用程序所需的可擴(kuò)展性。只要使用簡(jiǎn)單方法:為每個(gè)樂(lè)觀鎖定的對(duì)象采用數(shù)據(jù)庫(kù)列和對(duì)象版本字段,就很容易獲得可移植性。
這種鎖定帶來(lái)了另外的好處:能夠使用非連接模式的對(duì)象。只要把數(shù)據(jù)重新并入事務(wù)、然后通過(guò)樂(lè)觀鎖值驗(yàn)證已改動(dòng)的對(duì)象是不是失效副本,就很容易支持在離線狀態(tài)下改動(dòng)數(shù)據(jù)和關(guān)系的功能。
對(duì)象-關(guān)系映射
想編寫(xiě)面向?qū)ο蟮腏ava程序,卻把數(shù)據(jù)保存在關(guān)系數(shù)據(jù)庫(kù)里面,這在以前是困擾應(yīng)用程序開(kāi)發(fā)的一個(gè)重大問(wèn)題。
決定把用于對(duì)象關(guān)系映射的標(biāo)準(zhǔn)化元數(shù)據(jù)和語(yǔ)義添加到EJB 3.0內(nèi),這向?qū)崿F(xiàn)下列功能邁出了一大步:讓?xiě)?yīng)用程序能夠靈活地把應(yīng)用程序放在不同數(shù)據(jù)庫(kù)上面運(yùn)行,甚至可以使用不同的持久性框架來(lái)進(jìn)行運(yùn)行。對(duì)象-關(guān)系映射標(biāo)準(zhǔn)的第一個(gè)階段將包括如今人們用來(lái)映射域模型的幾種最流行的映射方法,譬如數(shù)據(jù)轉(zhuǎn)換和一對(duì)一及多對(duì)多關(guān)系等。隨后還會(huì)添加“高級(jí)”映射方法。
posted on 2009-02-27 14:49
ID刀 閱讀(124)
評(píng)論(0) 編輯 收藏 所屬分類:
JAVA_Base