Advanced Domain Models Made Easy with...

35
Enterprise Integration Made Easy Published under the Creative Commons Attribution Noncommercial Share Alike License Version 2.5. (Please see http://creativecommons.org/licenses/by-nc-sa/2.5 for complete details.) Advanced Domain Models with Grails Jason Rudolph [email protected]

Transcript of Advanced Domain Models Made Easy with...

Page 1: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Enterprise IntegrationMade Easy

Published under the Creative Commons Attribution Noncommercial Share Alike License Version 2.5. (Please see http://creativecommons.org/licenses/by-nc-sa/2.5 for complete details.)

Advanced Domain Models

with GrailsJason Rudolph

[email protected]

Page 2: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Introduction

Jason Rudolph

Grails Committer

Principal @ Relevance

Author

Page 3: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

AgendaThe case for GORM

Conventional thinking, unconventional productivity

Relationships, any way you like ‘em

Constraints, declare and be done

GORM for non-conformists

Hibernate mappings

EJB3 annotations

Going further with GORM

Page 4: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

DAOs Considered Harmful

Grails Object-Relational Mapping (GORM)

Zero-configuration persistence management

Rich relationship model

Declarative validation

Powerful query support

Easy scaffolding

Page 5: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Rock-Solid Foundation

Page 6: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

DAODemo

Page 7: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Dynamic Persistence Methods

save

delete

get

addTo...

removeFrom...

withTransaction

list

findAll

findBy...

count

exists

etc.

Page 8: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Learning to RelateOne-to-One

Page 9: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

1:1 Relationships

class Knight { String name int numDragonsSlain Sword sword }

class Sword { String serialNumber String manufacturer

}

Page 10: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

1:1 Relationships

class Knight { String name int numDragonsSlain Sword sword }

class Sword { String serialNumber String manufacturer Knight knight

}

Page 11: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

1:1 Relationships

class Knight { String name int numDragonsSlain Sword sword }

class Sword { String serialNumber String manufacturer Knight knight static belongsTo = Knight}

Page 12: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Expanding Our Horizons

One-to-Many

Page 13: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

1:n Relationships

class Knight { //... static hasMany = [swords:Sword]}

class Sword { //... Knight knight

static belongsTo = Knight}

Page 14: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Wisdom of CrowdsMany-to-Many

Page 15: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

class Knight { //... static hasMany = [battles:Battle]

}

class Knight { //... static hasMany = [battles:Battle] static belongsTo = Battle}

m:n Relationships

class Battle { //... static hasMany = [knights:Knight]}

Page 16: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Learning to RelateDemo

Page 17: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Conventional Thinking

Demo

Page 18: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

More GORM Fu

Customizable fetch modes

static fetchMode ww= [someOtherAttribute : ‘eager’]

Composition

static embedded = [‘someAttribute’]

Table-per-hierarchy inheritance

Page 19: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Declaring Constraints

Pre-packaged constraints

Custom constraints

Influence schemas and scaffolding

blank

creditcard

email

inList

min

max

matches

nullable

range

unique

url

etc.

Page 20: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

The Power of Constraint

Demo

Page 21: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Defying Conventional Wisdom

Non-conforming table/column names

Custom sequences

Complex keys

Advanced mappings

Page 22: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

No Schema Left Behind

Demo

Page 23: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Hibernate XML - Step-by-Step

Define Hibernate artifacts

Add hibernate.cfg.xml

Prepare HBM file for each deviant table

Consider reverse engineering with Hibernate tools

Create Grails domain classes

Add constraints (optional)

Page 24: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Why Hibernate XML?

Standard Hibernate artifacts

Reuse your existing mappings

Full power of GORM

Dynamic persistence methods

Constraints

Scaffolding

Page 25: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Pimp My EJBsDemo

Page 26: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

EJB3 Step-by-Step

Start with Java 5 (or higher)

Update DataSource.groovy

configClass = wwGrailsAnnotationConfiguration.class

Add POJOs to src/java

Define hibernate.cfg.xml

Drop in constraints (optional)

Page 27: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Why Annotate?

Standards-based POJOs

Reuse elsewhere

Not tied to Grails

Full power of GORM (once again)

Dynamic persistence methods

Constraints

Scaffolding

Page 28: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

A Groovier SolutionDemo

Page 29: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Going Further with GORM

GORM outside of Grails

grails.org/gorm+-+standalone+gorm

Java on GORM

jroller.com/page/ie?entry=java_on_grails

Page 30: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Still More to ExploreCustom user types

grails.org/hibernate+integration

ORM DSL <brand new!>

grails.org/GORM+-+Mapping+DSL

Migrations <brand new!>

code.google.com/p/dbmigrate/wiki/Grails

Page 31: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Resources

grails.org

Downloads

Latest release (0.6)

Development snapshot (1.0-RC1)

User guide, tutorials, screencasts, etc.

Mailing lists (grails.org/mailing+lists)

Page 32: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Resources (cont’d)

GORM Documentation

grails.org/gorm

Grails Podcast - Episode 18

svenhaiges.de/space/start/2006-11-24/1

Page 33: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Resources (cont’d)

Grails + EJB3 Tutorial

infoq.com/articles/grails-ejb-tutorial

Hibernate Tools

hibernate.org/255.html

Page 34: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration
Page 35: Advanced Domain Models Made Easy with Grailsjasonrudolph.com/.../Advanced_Domain_Models_in_Grails.pdf · DAOs Considered Harmful Grails Object-Relational Mapping (GORM) Zero-configuration

Slides & Examples Available

@

www.jasonrudolph.com/downloads

Please Fill Out Your Evaluations

This presentation is published under the Creative Commons Attribution Noncommercial Share Alike License Version 2.5.

(Please see http://creativecommons.org/licenses/by-nc-sa/2.5 for complete details.)