国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

利用EJB 3.0的JPA設計企業應用程序

2019-11-18 11:27:52
字體:
來源:轉載
供稿:網友

  本文將介紹 java Platform, EnterPRise Edition (Java EE 5) 的一種設計方法,它利用了 Enterprise JavaBeans (EJB) 3.0 新的 Java Persistence API (JPA)。JPA 提供了一種標準的對象關系映射解決方案,該解決方案避免了依靠第三方框架(如 Hibernate)。您將看到示例應用程序的具體內容,其中驗證了本方法并闡明要害設計決定。

  期待已久的下一版本 Java EE 5 即將發布。Java EE 5 許多新功能都包含經過修補的 EJB 架構,其突出特性之一是 JPA。由于具有容器內和容器外持久性選項,JPA 為 J2EE 架構師帶來一系列全新設計選擇。本文將著重介紹容器內應用程序的設計,此類應用程序依靠 EJB 容器提供企業服務,如事務處理和安全性。

  我將使用您熟悉的 PetStore 應用程序進行測試,以證實 JPA 的功能以及它如何向傳統 J2EE 設計模式發起挑戰。本應用程序比較瑣碎,所以不提供詳盡的實現細節。我將用代碼摘錄對設計注重事項進行說明。本文假設您熟悉 EJB 3.0 基本概念和對象關系(OR)映射基本概念。

  設計概述

  示例 PetStore 應用程序是基于 Web 的電子交易應用程序,它實現以下用例:
  • 瀏覽產品
  • 查找產品
  • 維護賬戶
  • 維護購物車
  • 創建訂單
  本應用程序被設計為具有三個主要邏輯層的多層 Java EE 應用程序:
  • 表示層(并非本文的重點)使用 Struts 框架。

  • 服務層是一種簡單的服務 facade,將所有工作委托給其協作者。服務層的目的是分離服務供給與服務實現。

  • 數據訪問層是一系列作為無狀態會話 bean 實現的粗粒度 Data access Objects (DAO)。出于持久性的需要,它們都依靠 Java 持久性實體治理器。
  應用程序域模型由 EJB 3.0 實體 bean 表示并用于層間的通信。當域對象離開數據訪問層時,它與實體治理器脫離。當重新進入數據訪問層時,它需要重新連接到實體治理器。

  注釋似乎是 Java 5 的一個廣泛采用的特性,JPA 也不例外。注釋可用于指定 OR 映射 —— 在 dW 文檔和教程中您經常可以看到 —— 而 PetStore 應用程序出于相同目的使用它們。然而值得一提的是您還能通過映射文件的方式指定 OR 映射。本文稍后的 OR 映射 一節將探討并比較這兩種可選方式。

  我在 Jboss 應用服務器中開發并部署 PetStore 應用程序(參見 參考資料)。我使用商用數據庫完成大多數開發工作并將應用程序后端移植到 PostgreSQL 數據庫(OR 映射 一節包含了關于使用 JPA 時您應該了解的數據庫遷移的潛在影響的討論)。

  本案例分析的目的之一是符合設計標準,答應高度可測試的實現。如 測試 一節所見,您能夠使用一系列測試技術來測試 PetStore 應用程序。

  PetStore 應用程序充分利用了這一事實:它是規則的 Web 應用程序。主要優點是所有層能夠運行在相同的 JVM 中,免除了組件分發的需要。本文的 遠程處理 一節簡要介紹了為應用程序添加遠程處理功能的方法。

  服務層

  服務層被設計為服務 facade。它由 PetStoreService 這一無狀態會話 bean 實現。Bean 要完全依靠其協作者來提供 Web 服務。

  因為簡化的 PetStore 要求被限定于從數據庫檢索數據并把數據存儲于數據庫,惟一的協作者就是 DAO。真正的應用程序能夠調用 Web 服務,通過 RMI/IIOP 或資源適配器訪問其他應用程序,并生成電子郵件消息等。所有此類型的功能都需要其他協作者支持。

  可通過 @EJB 或 @Resource 注釋注入協作者(如清單 1 所示)或通過 @PostConstrUCt 方法注入協作者(如清單 2 所示):

  清單 1. 使用 @EJB 注入協作者

 @EJB(beanName = "AccountDao") AccountDao accountDao;

  清單 2. 使用 @PostConstruct 注入協作者

 MessageSource messageSource; @PostConstruct public void init() {    messageSource = new MessageSourceImpl("exceptions"); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 崇州市| 彭州市| 称多县| 论坛| 泉州市| 尼木县| 正蓝旗| 鄂伦春自治旗| 健康| 武陟县| 绍兴县| 江川县| 西峡县| 景德镇市| 富源县| 彝良县| 亚东县| 盐边县| 高唐县| 崇仁县| 安阳县| 邯郸县| 大同县| 九台市| 比如县| 靖远县| 玉树县| 霞浦县| 泸溪县| 丹棱县| 民丰县| 名山县| 河南省| 乌审旗| 外汇| 怀柔区| 安阳县| 美姑县| 罗田县| 惠东县| 陆川县|