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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

用Spring、Hibernate和JBoss簡易步驟

2019-11-17 05:56:16
字體:
供稿:網(wǎng)友
 這篇文章的目的不是為了提供所使用的工具或技術(shù)的具體信息,而是提供給用 MDA 技術(shù)的體驗。請參閱 下載一節(jié) 獲得示例應(yīng)用程序的完整源代碼。請參閱 參考資料 下載 AndroMDA 和 JBoss,它們是運行示例所需要的軟件。
  
  開始
  
  AndroMDA 使用 xml 元數(shù)據(jù)交換(XML Metadata Interchange,XMI)文件格式的輸出,幾乎所有的建模工具都基于特定于平臺的 cartridge 生成應(yīng)用程序的源代碼。針對這個示例的目的,我將采用特定于 SPRing 和 Hibernate 的 cartridge。對于實際的 MDA 建模,我可以采用任何能導(dǎo)出(或保存)標(biāo)準(zhǔn) XMI 的工具。AndroMDA 的主頁上推薦了一些免費或幾乎免費的工具,但是它沒有限定自己只能與這些工具一起工作。
  
  有些 MDA 工具聲稱可以從統(tǒng)一建模語言(UML)的模型生成完整應(yīng)用程序,有些則側(cè)重于消除多數(shù)冗余的編碼任務(wù)。AndroMDA 屬于后一類。在應(yīng)用程序中,我需要編寫大約 10 行代碼,所以可以說 AndroMDA 將為我生成 95% 的代碼。
  
  您將注重到 AndroMDA 采用 Maven(一個類似于 Ant 的開放源碼工具)治理安裝和一般性應(yīng)用。AndroMDA 也可以和 Ant 一起使用,但是對于這個示例的目的,我建議采用 Maven。使用開放源碼工具可以保證每個人都能使用這個示例。
  
  用例
  
  示例應(yīng)用程序包含三個用例,如圖 1 所示:列出汽車(List Car)、添加汽車(Add Car)和刪除汽車(Remove Car)。所有這些用例的都標(biāo)記為 AndroMDA <<FrontEndUseCase>> 類型的 構(gòu)造型(stereotype),這告訴工具這個用例與最終用戶相關(guān),應(yīng)當(dāng)添加到用戶界面。<<FrontEndapplication>> 構(gòu)造型告訴 AndroMDA 該用例必須在應(yīng)用程序的第一頁上活動。
  
  
圖 1. 示例應(yīng)用程序的用例圖
   用Spring、Hibernate和JBoss簡易步驟(圖一)

  
  活動圖
  
  建立了用例之后,下一步是畫出每個用例的活動圖。活動圖 描述了每個用例內(nèi)部發(fā)生的情況。重點是必須為每個活動圖創(chuàng)建(并分配)一個控制器類。控制器類只是一個普通的類,它惟一的任務(wù)就是把來自 UI 的調(diào)用轉(zhuǎn)發(fā)到業(yè)務(wù)邏輯層(即,應(yīng)用程序的服務(wù))。
  
  圖 2 是 List Cars 用例的活動圖。當(dāng)用戶請求汽車列表時,應(yīng)用程序得到數(shù)據(jù)庫中的所有汽車。圖中第一個狀態(tài)的 getAllCars() / defer 是對控制器類方法的引用。圖中的過渡把 Collection 傳遞給下一狀態(tài),這將在應(yīng)用程序界面上顯示數(shù)據(jù)。在第二個狀態(tài)之后,用戶可以選擇 Add Car 或 Remove Car,或者再次列出汽車。
  
  
圖 2. List Cars 用例的活動圖
   用Spring、Hibernate和JBoss簡易步驟(圖二)

  
  在圖 3 中可以看到 Add Car 用例的活動圖,它有點不同。在這個圖中,最有意思的部分是從 Enter New Car 到 Store New Car 的過渡。過渡有一個信號,叫做 addNewCar,它有三個參數(shù)。使用這個信息,AndroMDA 可以知道 Web 界面需要從用戶請求這些參數(shù)。在圖的最后一個狀態(tài)中,我用控制器類的 createCar() 方法把數(shù)據(jù)傳遞給應(yīng)用程序的業(yè)務(wù)邏輯。
  
  
圖 3. Add Car 用例的活動圖
   用Spring、Hibernate和JBoss簡易步驟(圖三)
點擊查看大圖

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


  
  使用 AndroMDA
  
  設(shè)計了應(yīng)用程序模模型之后,就可以開始使用 AndroMDA 了。對于入門者來說,可以用它檢測模型是否有誤。只要進入項目的根目錄,并調(diào)用
  
  maven
  
  假如環(huán)境設(shè)置正確,Maven 會從 Internet 下載必要的包,生成源代碼文件,并編譯好一切。假如模型有錯,那么會得到消息。在第一次啟動 AndroMDA 之后,可以把調(diào)用變成
  
  maven -o
  
  這樣會使用現(xiàn)有的包,但偶然也會提示包已經(jīng)過時。
  
  手工編碼
  
  AndroMDA 生成了應(yīng)用程序的許多文件,但是我仍然需要做些手工編碼。我需要手工編碼的四個文件如下:
  
  /core/src/../CarsImpl.java
  /web/src/../ListCarsControllerImpl.java
  /web/src/../add/AddCarsControllerImpl.java
  /web/src/../remove/RemoveCarsControllerImpl.java
  在清單 1 中,我手工編碼到 CarsImpl.java 文件(它實現(xiàn)了 Services 類)中的行用 粗體 標(biāo)記。
  
  清單 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() 方法體中的內(nèi)容。
  
  清單 2. getAllCars() 方法
  
  try
  {
  form.setCars(this.getCars().getAllCars());
  }
  catch (Exception ex)
  {
  ex.printStackTrace();
  throw new RuntimeException(ex);
  }
  
  請 下載示例,自行查看其余的修改。
  
  配置 JBoss
  
  我需要對 JBoss 的配置稍做修改,以便它能與 Hibernate 一起工作。首先,要檢查是否啟用了服務(wù)器的 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>
  
  部署應(yīng)用程序
  
  不管您是否相信,用 AndroMDA 構(gòu)建應(yīng)用程序就是這么簡單!我要做的只是設(shè)計和建模應(yīng)用程序,以及少量手工編碼,然后就基本可以了。在可以部署示例之前,我需要為它創(chuàng)建數(shù)據(jù)庫。要跟上這部分,請確保桌面上正在運行 JBoss,環(huán)境設(shè)置也配置正確(即 JBOSS_HOME)。然后轉(zhuǎn)到自己項目的根目錄,并輸入:

  
  maven create-schema
  
  現(xiàn)在,在自己項目的根目錄中輸入以下命令,就可以部署應(yīng)用程序了:
  
  maven deploy
  
  假設(shè)一切正常,將得到一條 BUILD SUCCESSFUL 消息。
  
  現(xiàn)在應(yīng)當(dāng)可以瀏覽 http://localhost:8080/cars,使用應(yīng)用程序了。
  
  應(yīng)用程序架構(gòu)
  
  到最后才討論應(yīng)用程序架構(gòu)看起來可能不合常規(guī),但是對于這類開發(fā)來說這么做是有意義的。因為我使用 AndroMDA 和它的 cartridge 生成應(yīng)用程序,所以在最后我應(yīng)當(dāng)看看整體效果。假如您還沒有這么做,請 下載 示例項目并現(xiàn)在就研究它。
  
  像應(yīng)用程序本身一樣,架構(gòu)也非常簡單。/core/target/ 目錄包含持久性和業(yè)務(wù)邏輯類。Car 實體類是 Hibernate 實體,Cars 服務(wù)類是一個無狀態(tài)會話 bean。所有必要的文件和接口都是生成的。UI 層可以在 /web/target/ 目錄中找到。應(yīng)用程序的 Java 服務(wù)器頁面(jsp)和級聯(lián)樣式表(CSS)文件以及控制器類都在那里。包含整個應(yīng)用程序的文件位于 /app/target/。
  
  圖 5 顯示了應(yīng)用程序在 Web 瀏覽器中看起來的效果。
  
  
圖 5. 示例應(yīng)用程序的主屏幕
   用Spring、Hibernate和JBoss簡易步驟(圖五)
點擊查看大圖

  
  示例包 包含汽車治理應(yīng)用程序的 UML 模型和實現(xiàn)類,所以只需要設(shè)置環(huán)境變量,并針對項目運行 AndroMDA,就可以看到它的工作方式。
  
  結(jié)束語
  
  通過一個簡單的示例,我演示了使用 AndroMDA 構(gòu)建典型的 Web 企業(yè)應(yīng)用程序。Spring-Hibernate 應(yīng)用程序的多數(shù)代碼是由 Spring 和 Hibernate 的 cartridge 基于我的模型生成的;我只手工編碼了幾行代碼,并且這些代碼也毫不困難。
  
  顯然,應(yīng)用程序越復(fù)雜,開發(fā)起來就越不簡單。包含成百上千個類的應(yīng)用程序不會像這里演示的程序那樣簡單。但另一方面,通過使用 AndroMDA 或類似的 MDA 工具,可以把這類程序極大地簡化。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宝丰县| 洛阳市| 南陵县| 辽宁省| 乌拉特后旗| 石屏县| 通江县| 木兰县| 潮安县| 宝应县| 开封县| 伊宁市| 阿勒泰市| 洪洞县| 芒康县| 乐亭县| 乌鲁木齐县| 灯塔市| 海城市| 嵩明县| 临武县| 区。| 无锡市| 常熟市| 红安县| 社会| 潮州市| 南木林县| 留坝县| 科尔| 岳普湖县| 广南县| 武胜县| 甘洛县| 临湘市| 新巴尔虎左旗| 湾仔区| 阳城县| 通江县| 揭东县| 喜德县|