熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

用Spring、Hibernate和JBoss簡易步驟

2013-11-23 20:08:36  來源: Java開源技術 

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

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

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

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

  
  使用 AndroMDA
  
  設計了應用程序模模型之後就可以開始使用 AndroMDA 了對於入門者來說可以用它檢測模型是否有誤只要進入項目的根目錄並調用
  
  maven
  
  如果環境設置正確Maven 會從 Internet 下載必要的包生成源代碼文件並編譯好一切如果模型有錯那麼會得到消息在第一次啟動 AndroMDA 之後可以把調用變成
  
  maven o
  
  這樣會使用現有的包但偶爾也會提示包已經過時
  
  手工編碼
  
  AndroMDA 生成了應用程序的許多文件但是我仍然需要做些手工編碼我需要手工編碼的四個文件如下
  
  \core\src\\CarsImpljava
  \web\src\\ListCarsControllerImpljava
  \web\src\\add\AddCarsControllerImpljava
  \web\src\\remove\RemoveCarsControllerImpljava
  在清單 我手工編碼到 CarsImpljava 文件(它實現了 Services 類)中的行用 粗體 標記
  
  清單 需要一些手工編碼
  
  public class CarsImpl
  extends comdacecarsCarsBase
  {
  
  /**
  * @see comdacecarsCars#getAllCars()
  */
  protected javautilCollection handleGetAllCars()
  throws javalangException
  {
  return thisgetCarDao()findAll();
  }
  
  /**
  * @see comdacecarsCars#removeCar(javalangString)
  */
  protected void handleRemoveCar(javalangString id)
  throws javalangException
  {
  thisgetCarDao()remove(LongvalueOf(id));
  }
  
  /**
  * @see comdacecarsCars#createCar(javalangString javalangString int)
  */
  protected void handleCreateCar(javalangString make javalangString model int year)
  throws javalangException
  {
  thisgetCarDao()create(model year make);
  }
  }
  
  可以看到我並不需要很多手工編碼清單 顯示了我寫入 ListCarsControllerjava 文件的 getAllCars() 方法體中的內容
  
  清單 getAllCars() 方法
  
  try
  {
  formsetCars(thisgetCars()getAllCars());
  }
  catch (Exception ex)
  {
  exprintStackTrace();
  throw new RuntimeException(ex);
  }
  
  請 下載示例自行查看其余的修改
  
  配置 JBoss
  
  我需要對 JBoss 的配置稍做修改以便它能與 Hibernate 一起工作首先要檢查是否啟用了服務器的 HSQLDB TCP 連接然後編輯 [JBOSS_HOME]/server/[SERVER_NAME]/deploy/hsqldbdsxml 並取消兩個元素的注釋其中一個屬於連接
  
  <connectionurl>jdbc:hsqldb:hsql://localhost:</connectionurl>
  
  另一個屬於 Mbean
  
  <mbean code=orgjbossjdbcHypersonicDatabase
  name=jboss:service=Hypersonic>
  <attribute name=Port></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 createschema
  
  現在在自己項目的根目錄中輸入以下命令就可以部署應用程序了
  
  maven deploy
  
  假設一切正常將得到一條 BUILD SUCCESSFUL 消息
  
  現在應當可以浏覽//localhost:/cars使用應用程序了
  
  應用程序架構
  
  到最後才討論應用程序架構看起來可能不合常規但是對於這類開發來說這麼做是有意義的因為我使用 AndroMDA 和它的 cartridge 生成應用程序所以在最後我應當看看整體效果如果您還沒有這麼做請 下載 示例項目並現在就研究它
  
  像應用程序本身一樣架構也非常簡單\core\target\ 目錄包含持久性和業務邏輯類Car 實體類是 Hibernate 實體Cars 服務類是一個無狀態會話 bean所有必要的文件和接口都是生成的UI 層可以在 \web\target\ 目錄中找到應用程序的 Java 服務器頁面(JSP)和級聯樣式表(CSS)文件以及控制器類都在那裡包含整個應用程序的文件位於 \app\target\
  
  圖 顯示了應用程序在 Web 浏覽器中看起來的效果
  
  
示例應用程序的主屏幕
   educitycn/img_///jpg >

  
  示例包 包含汽車管理應用程序的 UML 模型和實現類所以只需要設置環境變量並針對項目運行 AndroMDA就可以看到它的工作方式
  
  結束語
  
  通過一個簡單的示例我演示了使用 AndroMDA 構建典型的 Web 企業應用程序SpringHibernate 應用程序的多數代碼是由 Spring 和 Hibernate 的 cartridge 基於我的模型生成的我只手工編碼了幾行代碼並且這些代碼也毫不困難
  
  顯然應用程序越復雜開發起來就越不簡單包含成百上千個類的應用程序不會像這裡演示的程序那樣簡單但另一方面通過使用 AndroMDA 或類似的 MDA 工具可以把這類程序極大地簡化
From:http://tw.wingwit.com/Article/program/Java/ky/201311/27999.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.