程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 用Spring、Hibernate和JBoss簡易步驟

用Spring、Hibernate和JBoss簡易步驟

編輯:JAVA編程入門知識
 這篇文章的目的不是為了提供所使用的工具或技術的具體信息,而是提供給用 MDA 技術的體驗。請參閱 下載一節 獲得示例應用程序的完整源代碼。請參閱 參考資料 下載 AndroMDA 和 JBoss,它們是運行示例所需要的軟件。
  
  開始
  
  AndroMDA 使用 XML 元數據交換(XML Metadata Interchange,XMI)文件格式的輸出,幾乎所有的建模工具都基於特定於平台的 cartridge 生成應用程序的源代碼。針對這個示例的目的,我將采用特定於 Spring 和 Hibernate 的 cartridge。對於實際的 MDA 建模,我可以采用任何能導出(或保存)標准 XMI 的工具。AndroMDA 的主頁上推薦了一些免費或幾乎免費的工具,但是它沒有限定自己只能與這些工具一起工作。
  
  有些 MDA 工具聲稱可以從統一建模語言(UML)的模型生成完整應用程序,有些則側重於消除多數冗余的編碼任務。AndroMDA 屬於後一類。在應用程序中,我需要編寫大約 10 行代碼,所以可以說 AndroMDA 將為我生成 95% 的代碼。
  
  您將注重到 AndroMDA 采用 Maven(一個類似於 Ant 的開放源碼工具)治理安裝和一般性應用。AndroMDA 也可以和 Ant 一起使用,但是對於這個示例的目的,我建議采用 Maven。使用開放源碼工具可以保證每個人都能使用這個示例。
  
  用例
  
  示例應用程序包含三個用例,如圖 1 所示:列出汽車(List Car)、添加汽車(Add Car)和刪除汽車(Remove Car)。所有這些用例的都標記為 AndroMDA <<FrontEndUseCase>> 類型的 構造型(stereotype),這告訴工具這個用例與最終用戶相關,應當添加到用戶界面。<<FrontEndApplication>> 構造型告訴 AndroMDA 該用例必須在應用程序的第一頁上活動。
  
  
圖 1. 示例應用程序的用例圖
   

  
  活動圖
  
  建立了用例之後,下一步是畫出每個用例的活動圖。活動圖 描述了每個用例內部發生的情況。重點是必須為每個活動圖創建(並分配)一個控制器類。控制器類只是一個普通的類,它惟一的任務就是把來自 UI 的調用轉發到業務邏輯層(即,應用程序的服務)。
  
  圖 2 是 List Cars 用例的活動圖。當用戶請求汽車列表時,應用程序得到數據庫中的所有汽車。圖中第一個狀態的 getAllCars() / defer 是對控制器類方法的引用。圖中的過渡把 Collection 傳遞給下一狀態,這將在應用程序界面上顯示數據。在第二個狀態之後,用戶可以選擇 Add Car 或 Remove Car,或者再次列出汽車。
  
  
圖 2. List Cars 用例的活動圖
   

  
  在圖 3 中可以看到 Add Car 用例的活動圖,它有點不同。在這個圖中,最有意思的部分是從 Enter New Car 到 Store New Car 的過渡。過渡有一個信號,叫做 addNewCar,它有三個參數。使用這個信息,AndroMDA 可以知道 Web 界面需要從用戶請求這些參數。在圖的最後一個狀態中,我用控制器類的 createCar() 方法把數據傳遞給應用程序的業務邏輯。
  
  
圖 3. Add Car 用例的活動圖
   
點擊查看大圖

  
  第三個活動圖與第二個類似。請參閱 下載一節 下載並研究整個模型。
  
  類圖
  
  類圖 記錄構成模型的所有類。在查看應用程序生成的文件時,可發現比類圖中看到的更多的類和文件。幸運的是,這類支持類和文件,只有開發特定平台的 cartridge 的架構師和程序員才需要考慮(例如示例使用的 Spring 和 Hibernate 的 cartridge)。像 AndroMDA 這樣的工具提供了 cartridge,並負責從它們生成文件,所以您可以把精力集中在應用程序建模上。
  
  在圖 4 所示的圖的底部,是 Car 類。它加上了 <<Entity>> 構造型的標記,這告訴 AndroMDA 它是一個 Hibernate 實體。使用 Hibernate cartridge 意味著不用擔心應用程序持久性的處理:它是自動生成的。Cars 類加上了 <<Service>> 構造型的標記。這意味著它是業務邏輯層的一部分,業務邏輯用實體向其他層和同一層的類提供服務。在圖的頂部是控制器。可以看到,應用程序需要三個控制器分別處理三個用例。
  
  
圖 4. 示例應用程序的類圖
   
點擊查看大圖

  
     
  使用 AndroMDA
  
  設計了應用程序模模型之後,就可以開始使用 AndroMDA 了。對於入門者來說,可以用它檢測模型是否有誤。只要進入項目的根目錄,並調用
  
  maven
  
  假如環境設置正確,Maven 會從 Internet 下載必要的包,生成源代碼文件,並編譯好一切。假如模型有錯,那麼會得到消息。在第一次啟動 AndroMDA 之後,可以把調用變成
  
  maven -o
  
  這樣會使用現有的包,但偶然也會提示包已經過時。
  
  手工編碼
  
  AndroMDA 生成了應用程序的許多文件,但是我仍然需要做些手工編碼。我需要手工編碼的四個文件如下:
  
  coresrc..CarsImpl.Java
  websrc..ListCarsControllerImpl.java
  websrc..addAddCarsControllerImpl.java
  websrc.. emoveRemoveCarsControllerImpl.java
  在清單 1 中,我手工編碼到 CarsImpl.java 文件(它實現了 Services 類)中的行用 粗體 標記。
  
  清單 1. 需要一些手工編碼 ...
  
  public class CarsImpl
  extends com.dace.cars.CarsBase
  {
  
  /**
  * @see com.dace.cars.Cars#getAllCars()
  */
  protected java.util.Collection handleGetAllCars()
  throws java.lang.Exception
  {
  return this.getCarDao().findAll();
  }
  
  /**
  * @see com.dace.cars.Cars#removeCar(java.lang.String)
  */
  protected void handleRemoveCar(java.lang.String id)
  throws java.lang.Exception
  {
  this.getCarDao().remove(Long.valueOf(id));
  }
  
  /**
  * @see com.dace.cars.Cars#createCar(java.lang.String, java.lang.String, int)
  */
  protected void handleCreateCar(java.lang.String make, java.lang.String model, int year)
  throws java.lang.Exception
  {
  this.getCarDao().create(model, year, make);
  }
  }
  
  可以看到,我並不需要很多手工編碼。清單 2 顯示了我寫入 ListCarsController.java 文件的 getAllCars() 方法體中的內容。
  
  清單 2. getAllCars() 方法
  
  try
  {
  form.setCars(this.getCars().getAllCars());
  }
  catch (Exception ex)
  {
  ex.printStackTrace();
  throw new RuntimeException(ex);
  }
  
  請 下載示例,自行查看其余的修改。
  
  配置 JBoss
  
  我需要對 JBoss 的配置稍做修改,以便它能與 Hibernate 一起工作。首先,要檢查是否啟用了服務器的 HSQLDB TCP 連接。然後,編輯 [JBOSS_HOME]/server/[SERVER_NAME]/deploy/hsqldb-ds.xml 並取消兩個元素的注釋,其中一個屬於連接:
  
  <connection-url>jdbc:hsqldb:hsql://localhost:1701</connection-url>
  
  另一個屬於 Mbean:
  
  <mbean code="org.jboss.jdbc.HypersonicDatabase"
  name="jboss:service=Hypersonic">
  <attribute name="Port">1701</attribute>
  <attribute name="Silent">true</attribute>
  <attribute name="Database">default</attribute>
  <attribute name="Trace">false</attribute>
  <attribute name="No_system_exit">true</attribute>
  </mbean>
  
  部署應用程序
  
  不管您是否相信,用 AndroMDA 構建應用程序就是這麼簡單!我要做的只是設計和建模應用程序,以及少量手工編碼,然後就基本可以了。在可以部署示例之前,我需要為它創建數據庫。要跟上這部分,請確保桌面上正在運行 JBoss,環境設置也配置正確(即 JBOSS_HOME)。然後轉到自己項目的根目錄,並輸入:
  
     
  maven create-schema
  
  現在,在自己項目的根目錄中輸入以下命令,就可以部署應用程序了:
  
  maven deploy
  
  假設一切正常,將得到一條 BUILD SUCCESSFUL 消息。
  
  現在應當可以浏覽 http://localhost:8080/cars,使用應用程序了。
  
  應用程序架構
  
  到最後才討論應用程序架構看起來可能不合常規,但是對於這類開發來說這麼做是有意義的。因為我使用 AndroMDA 和它的 cartridge 生成應用程序,所以在最後我應當看看整體效果。假如您還沒有這麼做,請 下載 示例項目並現在就研究它。
  
  像應用程序本身一樣,架構也非常簡單。core arget 目錄包含持久性和業務邏輯類。Car 實體類是 Hibernate 實體,Cars 服務類是一個無狀態會話 bean。所有必要的文件和接口都是生成的。UI 層可以在 web arget 目錄中找到。應用程序的 Java 服務器頁面(jsp)和級聯樣式表(Css)文件以及控制器類都在那裡。包含整個應用程序的文件位於 app arget。
  
  圖 5 顯示了應用程序在 Web 浏覽器中看起來的效果。
  
  
圖 5. 示例應用程序的主屏幕
   
點擊查看大圖

  
  示例包 包含汽車治理應用程序的 UML 模型和實現類,所以只需要設置環境變量,並針對項目運行 AndroMDA,就可以看到它的工作方式。
  
  結束語
  
  通過一個簡單的示例,我演示了使用 AndroMDA 構建典型的 Web 企業應用程序。Spring-Hibernate 應用程序的多數代碼是由 Spring 和 Hibernate 的 cartridge 基於我的模型生成的;我只手工編碼了幾行代碼,並且這些代碼也毫不困難。
  
  顯然,應用程序越復雜,開發起來就越不簡單。包含成百上千個類的應用程序不會像這裡演示的程序那樣簡單。但另一方面,通過使用 AndroMDA 或類似的 MDA 工具,可以把這類程序極大地簡化。
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved