程序員應用EJB 3.0必要的準備

 

EJB 3.0極其重視開發的簡易性,並調整了模型。這絕非巧合,因爲規範的主要設計者:Linda DeMichiel選擇了廣泛聽取外界的意見,並借鑑TopLink等產品所取得的經驗。這樣一來,這項規範就可以沿着已經由流行、得到公認的技術開闢出來的道路前進,而這些道路實際上成了業內事實上的最佳實踐。

那麼,作爲程序員的你,面對新的規範,該做哪些準備呢?

處理好架構問題

首先要確保你的架構可以利用持久性方面的標準及認可的設計模式。實際上,這可能需要改動你的應用程序,不過如果你期望應用程序能經得起時間的考驗,那麼進行這種投入是值得的。使用會話外觀、數據訪問對象(DAO)層或者服務層總是好主意,不過在這裏它們都至關重要。如果你的應用程序已經使用遠程實體構建而成——雖然這種做法並不常見,那麼就需要重新設計架構。訪問持久性對象之前,應當先部署可遠程化服務層。如果要使用實體,它就應當完全是本地實體。

不過,使用本地實體不是目的,因爲實體還爲部署人員提供了爲實體聲明事務和安全需求的功能。EJB 3.0不允許任何這些屬性在實體層面進行設定。相反,實體的運行環境將由調用者來確定,所以所需的任何事務或者安全環境將由負責封閉的J2EE組件來安裝或者聲明。

CMP應用程序

如果你已經是容器管理持久性(CMP)用戶,那麼你可能迫不及待地想獲得新特性,希望拋棄無關的接口、不必要的bean代碼以及繁瑣的XML部署描述符,這些是與以前的實體bean開發相關的一些煩人問題。分別要擴展EJBObject和EJBLocalObject的遠程和本地接口再也不需要了;現在實體只要實現普通Java接口(POJI)即可,如果它們選擇這麼做的話。

其次,你可能在想如何更容易地在容器中部署EJB,或者甚至根本不用部署,而是在獨立環境中的容器外面進行測試。因爲實體是具體的普通Java對象(POJO),你就可以像一直以來創建Java對象的方式那樣,即使用new()來創建。

POJO應用程序

可以通過實體管理器(EntityManager)訪問大部分新的持久性API。實體管理器可以注入到會話bean裏面,或者用Java命名和目錄接口(JNDI)進行查詢。實體管理器代表事務的持久性上下文。一旦發現操作單元或者實體管理器管理的對象在事務結束後“很髒”,就會被寫到外面的數據存儲區。

應用程序可以通過抽取含有操作單元/會話工件(artifact)的代碼,讓自己不受全面變化的影響。這樣一來,就可以通過可插入方式來獲得所用的實際會話。定義會話、然後允許包圍層把它與外界隔離開來,這類似EJB 3.0容器所採用的依賴注入範例(dependency injection paradigm)。應用程序中使用的所有資源應當採用這種模式。在EJB 3.0中,標準資源將由應用程序聲明,隨後在運行時被注入到bean裏面。

採用標準特性

EJB 3.0的許多特性可以在TopLink存在已久的特性當中找到影子。只要使用這些特性,你就能夠擁有EJB 3.0的功能,雖然API還沒有完成。

查詢就是這樣一個方面,你現在可以開始使用EJB 3.0的特性。EJB 3.0查詢可以從實體管理器獲得,並且可以在上面執行。可以在你需要直接查詢SLQ、並通過查詢返回對象的少數情況下,創建本地SQL查詢。

查詢語言往往是造成遷移問題的根源,因爲不編寫實質性或者窮舉性的轉換分析工具,就很難實現自動轉換。EJB查詢語言這種合理、有效的方法可對關係查詢語言進行抽象處理,將受益於新增的幾項特性。現有的EJB查詢語言仍可以適用,不過EJB查詢語言方面的更多構件和功能將進一步改進查詢語言。使用EJB查詢語言編寫查詢將是明智之舉,因爲查詢語言不會出現重大改變,除了功能上有所添加外。

繼承

EJB 2.1從來沒有指定真正的、自然的繼承。實際上,只有在廠商不設置障礙的情況下才有可能實現繼承,不過仍很難定義及管理。EJB 3.0卻不會這樣。由於具體的Java對象能夠彼此繼承,也用不着定義約束繼承範圍的方法,所以你能夠創建任意深度及廣度的實體繼承層次。

目前可以通過TopLink Mapping Workbench或JDeveloper、映射Java對象的GUI工具以及用於映射對象的基於Java的API,獲得同樣的這種靈活性。現在你可以創建域模型(domain model),以遵守適合你應用程序的繼承策略,而不必等規範發佈。

樂觀鎖定

TopLink支持的樂觀鎖定(optimistic locking)模型現在將被採用到EJB 3.0模型裏面。這種機制對應用程序非常有用,不僅僅是因爲在讀/寫訪問比通常爲90:10的情況下,它可以大大提高性能;還因爲它有助於獲得現代系統所需的那種可擴展架構。業界的衆多應用程序使用這種主要的鎖定範例,來獲得Web應用程序所需的可擴展性。只要使用簡單方法:爲每個樂觀鎖定的對象採用數據庫列和對象版本字段,就很容易獲得可移植性。

這種鎖定帶來了另外的好處:能夠使用非連接模式的對象。只要把數據重新併入事務、然後通過樂觀鎖值驗證已改動的對象是不是失效副本,就很容易支持在離線狀態下改動數據和關係的功能。

對象-關係映射

想編寫面向對象的Java程序,卻把數據保存在關係數據庫裏面,這在以前是困擾應用程序開發的一個重大問題。

決定把用於對象關係映射的標準化元數據和語義添加到EJB 3.0內,這向實現下列功能邁出了一大步:讓應用程序能夠靈活地把應用程序放在不同數據庫上面運行,甚至可以使用不同的持久性框架來進行運行。對象-關係映射標準的第一個階段將包括如今人們用來映射域模型的幾種最流行的映射方法,譬如數據轉換和一對一及多對多關係等。隨後還會添加“高級”映射方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章