JAX 2007: Grails – Rapid Web Application Development (Sven Haiges, Actionality)

Intro

Über S.H.: von Struts über JSF, Spring MVC zu Grails. Erstellt Grails Podcast.

Motivation

Framework wie Rails – Convention over Configuration, DRY

Spring MVC im Hintergrund

Grails vs. Rails Benchmark – Skaliert weitaus besser als Rails. 1.0 Release im Sommer, 0.5 im Mai.

grails clean

grails update

zum Update, soll schmerzlos sein.

Benutzte Frameworks

Spring: Spring DI + Spring MVC

Hibernate

SiteMesh – Layouting

Java EE – Integration

Standalone oder Hib-Mappings f Legacy-Schemata; EJB3-Integration; vorhandene Spring-Beans können verwendet werden.

Quickstart siehe am besten hier.

ApplicationBootStrap zum Persistieren.

TL-Erzeugung. Zur Laufzeit deploybar, ebenso mit Controller + Service.

Server-Start runApp.groovy. snipplr.com

MVC in Grails

Model: Domain-Klassen etc.

class Podcast {

String title

String feedUrl

}

View: Groovy SP oder JSP; dynamic TagLibs

Controller: Grails Controller + Grails Service

Object-Relational Mapping GORM. Equals()/hashCode() werden automatisch + dynamisch erstellt.

grails create-domain-class

Mapping 1:1

class Podcast {
Author author
String title
}

Mapping 1:n

class Podcast {
def hasMany = [ episodes : Episode ]
String title
}

Mapping m:n

class Podcast {
def hasMany = [ episodes : Episode ]
String title
}

class Author
{
def hasMany = [ podcasts : Podcasts ]
}

GORM: Dynamic Finders

Podcast.findByTitle(), QBE + HQL unterstützt.

Constraints

class Podcast {
String title
String feedUrl
static constraints = {
title(size:1..50)
feedUrl(unique:true)
}
}

GORM DB Konfiguration

development/production/test

Classe Development[...]DataSource ändern. Standard: Development.

View-Technologien

Die meisten verwenden GSP wg. der Dynamic Tag Libs.

Grails Controller

Generierbar (mit CRUD), wird dynamisch geladen. Immer alle CRUD-Operationen werden erstellt, DELETE kann z.B. nicht ausgeschlossen werden. Controller und Views müssen entsprechend manuell angepasst werden.

Parameter, Session, Flash-Objekte.

render()-Methode sehr mächtig – AJAX

HTTP-MEthod-Restrictions.

Dynamisches Scaffolding

im Bsp.: def scaffold= Podcast

Services

Kapselung von Business-Logik.

Buchempfehlung Getting Started with Grails (InnoQ)

  1. Keine Kommentare