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

DynaFuse 1.0 發布:全層動態建模的 J2EE 整合架構

     編輯:Java 相關知識

專案定位

DynaFuse 類似 AppFuse,整合 Struts、Spring、Hibernate、Groovy,提出「Everything be Dynamic」理念,從 DAO 到 Web 層提供動態建模與腳本化開發方案。

架構三層

層次核心介面動態特性
DAODAO、DynaDAO通用 CRUD + Groovy 腳本調用 (Hibernate 實作)
ServiceManager、DynaManager封裝 DAO、支援事務/非事務腳本執行
WebDynaActionStruts Action 整合 Groovy 腳本

關鍵實作細節

1. Hibernate 動態模型 (無 POJO)

<hibernate-mapping default-lazy="false">
  <class table="t_dept" entity-name="Dept">
    <id name="id" column="dept_id"><generator class="native"/></id>
    <property name="name" column="dept_name" not-null="true"/>
    <bag name="persons" cascade="delete" inverse="true">
      <key column="deptid"/>
      <one-to-many class="Person"/>
    </bag>
  </class>
  <class table="t_person" entity-name="Person">
    <id name="id" column="person_id"><generator class="native"/></id>
    <property name="name" column="person_name" not-null="true"/>
    <many-to-one name="dept" class="Dept" column="deptId"/>
  </class>
</hibernate-mapping>

資料以 Map 結構存放,無靜態實體類別。

2. DAO 層 Groovy 腳本 (PersonDAO.groovy)

import org.hibernate.Session;
import org.hibernate.Query;

public class PersonDAO {
    public Session session; // 框架自動注入
    public Object getAvgAgeOfDept(Integer deptId) {
        String hql = "select avg(t.age) from Person t where t.dept.id=:deptId";
        Query q = session.createQuery(hql);
        q.setInteger("deptId", deptId);
        return q.uniqueResult();
    }
}

3. Service 層腳本調用 DAO 腳本 (DeptManager.groovy)

import org.robusta.dynafuse.dao.DynaDAO;
import java.util.List;

public class DeptManager {
    public DynaDAO dynaDao; // 框架自動注入
    public List getDepts() { return dynaDao.getObjects("Dept", null, null, null); }
    public Object getAvgAgeOfDept(Integer deptId) {
        return dynaDao.invokeScript("PersonDAO.groovy", "getAvgAgeOfDept", new Object[]{deptId});
    }
}

4. Web 層 Action 腳本 (DeptAction.groovy)

public class DeptAction extends BaseAction {
    public DynaManager dynaManager;
    public ActionForward editDept(ActionMapping mapping, ActionForm form,
                                  HttpServletRequest request, HttpServletResponse response) {
        String deptId = request.getParameter("deptId");
        if (deptId != null) {
            Map data = dynaManager.getObject("Dept", new Integer(deptId));
            Long avgAge = (Long) dynaManager.invokeScript("DeptManager.groovy",
                                "getAvgAgeOfDept", new Object[]{new Integer(deptId)});
            DynaValidatorActionForm f = (DynaValidatorActionForm) form;
            f.set("id", data.get("id"));
            f.set("avgAge", avgAge);
            updateFormBean(mapping, request, f);
        }
        return mapping.findForward("edit");
    }
}

部署與運行

  1. MySQL 建立 dynafuse 資料庫,執行 create-tables.sql。
  2. Tomcat 5.0.28 common/lib 放入 MySQL 驅動與 jta.jar。
  3. 部署 dynafuse.war 並啟動,訪問 https://localhost:8080/dynafuse。

目錄結構

build/       編譯輸出
config/      Spring 配置
data/        測試資料
dist/        發布包
docs/        文件
lib/         依賴 JAR
metadata/    XDoclet 片段
script/      Groovy 腳本
src/         Java 原始碼
test/        測試碼
web/         JSP 頁面
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved