在EJB 2.0局部引用和容器治理關系出現之前,通常把實體EJB用于模型粗粒度域對象。這主要是由于與遠程通信有關系統開銷并阻止了細粒度訪問企業層的客戶層對象。粗粒度設計的性能通過實現數值對象而促進改善,壓縮所有的數據也就是說在客戶層和企業層之間傳遞數據。
從企業層到客戶層傳遞數據的過程中使用XML,可以幫助你實現在的應用程序中的多種寬松連接;然而,當你把新的域對象添加到實體型中時,你可能需要添加用于創建新DOM構架的類來添加該實體。在文中,我們將開發一個框架來動態地遍歷容器治理和給定的局部EJB有關的域,并且創建一個可以在應用程序的多個層之間傳遞的XML件。這個方法將有以下優點∶
在企業層和客戶層之間促進寬松連接。
便于治理域對象之間關系。
從系統中除去復雜數值對象因為XML是由動態地遍歷CMP和CMR域產生的,當它們添加新對象到域模型中時,bean提供者不必創建新的用來創建新的DOM構架的對象類。
EJB 2.0局部引用促進訪問bean組件;bean組件與局部引用結合可以含于與其他的被容器治理的bean的關系。舉例來說,在一個幫助系統中,UserEJB可以有與ServiceRequestEJB的一到多雙向關系和與PRodUCtEJB的一到一的單向聯系以及與ServiceRequestHistoryEJB的一到的雙向關系。UserEJB同時可以有與PhoneEJB一到多的雙向關系。這樣,使用EJB 2.0局部引用和容器治理關系,你可以設計一套復雜的有關體。容器治理持久性和關系域是在bean類中使用抽象存取程序方法定的。用于關系域的存取程序方法要么返回一個集合要么返回定義這個系的bean的本機接口,這還取決于這個關系集的容量。這些存取程序法可以通過bean組件的本機接口展示。EJB 2.0的深入研究超出了本文范圍,請參閱EJB 2.0的規范。
一個效率高的設計模式應該通過外觀組件展示你的應用程序的使用案例并且不準從客戶層中直接訪問實體組件。回到我們的幫助系統的例子中來,其中的一個使用案例是取得給定用戶的具體資料。外部組件可以查找需要的用戶實體組件,并且通過容器治理持久性與關系域取得所需數據并把它返回表現層。
用于數據傳送對象的一個顯而易見的選擇就是簡單的java bean。UserBean可能有表示持久性與關系域的屬性。這種關系域要么是java.util.Collection要么是其他的取決于這種關系的bean組件。UserBean可能有ServiceRequestBean和PhoneBean集。ServiceRequestBean可能有一個ProductBean和許多ServiceRequestHistory bean組件。此外,這些bean組件還可能還有簡單的String或者表現容器治理持久性域的基本屬性。這個選擇的主要的不利之處就是使你的實體模型更加復雜,使你的數據傳送對象bean層次更加復雜,還將在你的服務(企業)層和消費(表現)層之間創建緊密連接。研究一下這個關系的復雜的層次,一個更好的選擇是使用XML DOM對象作為數據傳送對象。你的組件將產生oeg.w3c.dom.Document對象類型并且你的表現組件使用XML的jsp自定義標記和XSLT文件來“消費”它們。
新聞熱點
疑難解答