5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional...

35
5-minute Techniques for Enterprise Integration 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.) Bending GORM Jason Rudolph [email protected]

Transcript of 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional...

Page 1: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

5-minute Techniques for Enterprise Integration

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.)

Bending GORMJason Rudolph

[email protected]

Page 2: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

Introduction

Jason Rudolph

jasonrudolph.com

thinkrelevance.com

Page 3: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

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

Groovy to the rescue!

Page 4: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,
Page 5: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

DAOs Considered Harmful

Grails Object-Relational Mapping (GORM)

Zero-configuration persistence management

Rich relationship model

Declarative validation

Powerful query support

Easy scaffolding

Page 6: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

DAODemo

Page 7: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

Conventional Thinking

Demo

Page 8: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

More GORM Fu

Customizable fetch modes

static fetchMode ww= [someOtherAttribute : ‘eager’]

Composition

static embedded = [‘someAttribute’]

Mapping inheritance

Page 9: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

Declaring Constraints

Pre-packaged constraints

Custom constraints

Influence schemas and scaffolding

blank

creditcard

email

inList

min

max

matches

nullable

range

unique

url

etc.

Page 10: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

The Power of Constraint

Demo

Page 11: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

Defying Conventional Wisdom

Non-conforming table/column names

Custom sequences

Complex keys

Advanced mappings

Page 12: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

No Schema Left Behind

Demo

Page 13: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

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 14: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

Why Hibernate XML?

Standard Hibernate artifacts

Reuse your existing mappings

Full power of GORM

Dynamic persistence methods

Constraints

Scaffolding

Page 15: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

Pimp My EJBsDemo

Page 16: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

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 17: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

Why Annotate?

Standards-based POJOs

Reuse elsewhere

Not tied to Grails

Full power of GORM (once again)

Dynamic persistence methods

Constraints

Scaffolding

Page 18: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

Rampant AgnosticismDemo

Page 19: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

A Groovier SolutionDemo

Page 20: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

This Just In...Brand New for 1.0!

Page 21: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

GORM DSL

class Knight { // ... static mapping = {

}}

Page 22: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

GORM DSL

class Knight { // ... static mapping = { table ‘knights’

}}

Page 23: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

GORM DSL

class Knight { // ... static mapping = { table ‘knights’ version false

}}

Page 24: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

GORM DSL

class Knight { // ... static mapping = { table ‘knights’ version false id column: ‘knight_id’

}}

Page 25: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

GORM DSL

class Knight { // ... static mapping = { table ‘knights’ version false id column: ‘knight_id’ columns { numDragonsSlain column: ‘dragon_count’ // ... } }}

Page 26: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

dē es elDemo

Page 27: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

ID generation

Lazy/eager fetching

Inheritance strategy

Index definitions

Caching

More Declarative DSL Goodness

Page 28: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

Why DSL?

No additional XML or Java needed

Lean syntax

Mappings close at hand

Full power of GORM (one more time)

Page 29: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

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: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

Still More to ExploreCustom user types

grails.org/hibernate+integration

Migrations

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

Explicit Insert Plugin

grails.org/explicit+insert+plugin

Page 31: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

Resources

grails.org

Downloads

Latest release (1.0.1)

Development snapshot (1.0.2)

User guide, tutorials, screencasts, etc.

Mailing lists (grails.org/mailing+lists)

Page 32: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

Resources (cont’d)

GORM Documentation

grails.org/gorm

ORM DSL

grails.org/GORM+-+Mapping+DSL

Page 33: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

Resources (cont’d)

Grails + EJB3 Tutorial

infoq.com/articles/grails-ejb-tutorial

Hibernate Tools

hibernate.org/255.html

Page 34: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,
Page 35: 5-minute Techniques Bending GORM for Enterprise Integration...Agenda The case for GORM Conventional thinking, unconventional productivity Relationships, any way you like ‘em Constraints,

Slides & Examples Available

@

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.)