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

Grails 整合 EJB3 Domain Model:企業級 RAD 新選擇

     編輯:J2EE

動機

Ruby on Rails 雖敏捷,但缺乏企業級服務(分散式交易、訊息佇列等)。Grails 基於 Groovy,無縫整合 Java EE 生態,同時保有腳本語言開發效率。

核心優勢:GORM 動態增強 EJB3 實體 Bean

  • GORM 建構於 Hibernate 3 之上(未來支援 JPA),透過 Groovy MOP (Meta Object Protocol) 向靜態 EJB3 實體 Bean 動態注入 findAllBy*、save()、delete() 等方法。
  • 這些動態方法不僅 Groovy/Grails 可呼叫,**Java 代碼亦可直接呼叫**,完美橋接兩個世界。
  • 無需修改 EJB3 原始碼,即可享受動態查詢、驗證、關聯管理等 RAD 功能。

程式碼範例

// 動態查詢:依員工查電腦
def showComputersByEmployee = {
    render(view:'list', model:[
        computerBeanList: ComputerBean.findAllByEmployeeBean(EmployeeBean.get(params.id))
    ])
}

// 關聯儲存:雙向綁定
def update = {
    def computerBean = ComputerBean.get(params.id)
    if (computerBean) {
        if (computerBean.employeeBean) computerBean.employeeBean.computers.remove(computerBean)
        computerBean.properties = params
        def employeeBean = EmployeeBean.get(params.employeeId)
        employeeBean.computers.add(computerBean)
        computerBean.employeeBean = employeeBean
        if (computerBean.save()) redirect(action:'show', id:computerBean.id)
        else render(view:'edit', model:[computerBean:computerBean])
    } else { flash.message = "Not found"; redirect(action:'edit', id:params.id) }
}

// 宣告式驗證規則
static constraints = {
    networkId(size:6..8, blank:false, unique:true)
    firstName(maxSize:20, blank:false)
    lastName(maxSize:20, blank:false)
    startDate(nullable:false)
}

// 進階 Criteria 查詢
def showSearchResults = {
    def criteria = EmployeeBean.createCriteria()
    def results = criteria {
        or {
            ilike("networkId", "%${params.networkId}%")
            and { eq("firstName", params.firstName); eq("lastName", params.lastName) }
        }
    }
    render(view:'list', model:[employeeBeanList: results])
}

總結

Grails + EJB3 讓團隊同時擁有:

  1. Java EE 企業級服務(交易、安全、訊息、叢集)
  2. 2. Groovy 動態語言開發效率(Scaffolding、動態 GORM、DSL 驗證) 3. 領域模型重用(既有 EJB3 實體直接對接,零遷移成本)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved