首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

MDA 實戰:用 AndroMDA + Spring + Hibernate + JBoss 從模型生成 Web 應用

     編輯:Java 程式設計入門

什麼是 MDA 以及 AndroMDA 的定位

MDA (Model-Driven Architecture):以平台無關模型 (PIM) 為核心,通過映射規則生成平台相關模型 (PSM) 及代碼。AndroMDA 屬於「消除樣板代碼」流派:生成 95% 基礎設施代碼 (持久層、控制器、視圖綁定),開發者僅填寫 ~10 行業務邏輯。不承諾「全自動生成完整應用」,但極大提升構建標準化企業級 Web 應用的效率。

工具鏈與環境

  • 建模工具:任意支持導出標準 XMI (UML 2.x) 的工具 (Poseidon, ArgoUML, MagicDraw, Enterprise Architect 等)
  • 生成引擎:AndroMDA (基於 Maven 管理構建生命週期)
  • 目標平台:Spring + Hibernate + JBoss AS (Cartridge: spring, hibernate, jsf/struts)
  • 數據庫:HSQLDB (JBoss 內置,配置 TCP 模式)

建模階段:三圖驅動生成

1. 用例圖 —— 定義功能邊界與前端入口

用例圖

  • 三個用例:List Car、Add Car、Remove Car
  • 關鍵 Stereotype:<<FrontEndUseCase>> (需生成 UI)、<<FrontEndApplication>> (首頁入口)

2. 活動圖 —— 定義流程與控制器契約

List Cars 活動圖

Add Car 活動圖

  • 每個活動圖綁定一個 控制器類 (POJO,僅轉發調用到 Service 層)
  • 狀態節點對應控制器方法 (如 getAllCars()、createCar())
  • 轉移 (Transition) 攜帶參數信號 (如 addNewCar(make, model, year)),AndroMDA 据此生成表單字段

3. 類圖 —— 定義領域模型與服務契約

類圖

  • <<Entity>> Car:Hibernate 實體,自動生成映射、DAO、表結構
  • <<Service>> Cars:業務邏輯門面,方法 getAllCars(), createCar(), removeCar()
  • 三個控制器類對應三個用例

生成與構建流程

  1. 將 XMI 文件放入項目 model/ 目錄
  2. 配置 pom.xml 引入 AndroMDA Maven Plugin 與目標 Cartridge
  3. 執行 mvn clean install (首次下載依賴) 或 mvn -o install (離線)
  4. AndroMDA 讀取 XMI → 生成源碼到 target/generated-sources/ → 編譯打包

手工編碼點 (僅 4 個文件,~30 行核心邏輯)

文件職責關鍵代碼片段
CarsImpl.javaService 實現
protected Collection handleGetAllCars() {
    return getCarDao().findAll();
}
protected void handleCreateCar(String make, String model, int year) {
    getCarDao().create(model, year, make);
}
protected void handleRemoveCar(String id) {
    getCarDao().remove(Long.valueOf(id));
}
ListCarsControllerImpl.java控制器
try {
    form.setCars(getCars().getAllCars());
} catch (Exception ex) {
    throw new RuntimeException(ex);
}
AddCarsControllerImpl.java控制器從表單取參數調用 getCars().createCar(...)
RemoveCarsControllerImpl.java控制器調用 getCars().removeCar(id)

JBoss 數據源配置關鍵點

編輯 [JBOSS_HOME]/server/[NAME]/deploy/hsqldb-ds.xml,取消註釋:

<connection-url>jdbc:hsqldb:hsql://localhost:1701</connection-url>
<mbean code="org.jboss.jdbc.HypersonicDatabase" name="jboss:service=Hypersonic">
    <attribute name="Port">1701</attribute>
    <attribute name="Silent">true</attribute> ...
</mbean>

啟用 TCP 端口 1701,使 Hibernate 能以網絡模式連接 HSQLDB。

部署與驗證

  1. mvn create-schema — 基於 Hibernate 映射自動建表
  2. mvn deploy — 打包 EAR/WAR 並熱部署到 JBoss
  3. 訪問 https://localhost:8080/cars — 看到生成的列表/新增/刪除頁面

應用主界面

生成項目結構解析

  • core/:持久層 (Entity, DAO, Hibernate 映射)、服務層接口/基類
  • web/:JSP、CSS、Controller 實現、JSF/Struts 配置
  • app/:EAR 組裝、應用級配置

總結:MDA 帶來的效能增益

  • **消除重復勞動**:DAO、HBM、Controller 骨架、JSP 列表/表單頁 100% 生成
  • **架構統一**:分層、事務、異常處理、國際化等最佳實踐內建於 Cartridge
  • **聚焦業務**:開發者只關注 CarsImpl 等 Service 實現類
  • **可維護性**:模型即文檔,修改模型重新生成即可同步代碼結構

適用場景:標準 CRUD 密集型企業應用、後台管理系統、數據驅動型 Web 門戶。複雜域邏輯、高度定制化 UI 仍需手工編寫,但基礎設施零負擔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved