Download - Groovy & Grails for Spring/Java developers

Transcript
Page 1: Groovy & Grails for Spring/Java developers

Groovy & Grails for Java developers

Peter Ledbrook, Developer [email protected] / @pledbrook

© 2012 SpringOne 2GX. All rights reserved. Do not distribute without permission.

1

Page 2: Groovy & Grails for Spring/Java developers

Demo

2

Page 3: Groovy & Grails for Spring/Java developers

3

3

Page 4: Groovy & Grails for Spring/Java developers

4

4

Page 5: Groovy & Grails for Spring/Java developers

5

5

Page 6: Groovy & Grails for Spring/Java developers

6

6

Page 7: Groovy & Grails for Spring/Java developers

7

7

Page 8: Groovy & Grails for Spring/Java developers

8

8

Page 9: Groovy & Grails for Spring/Java developers

9

9

Page 10: Groovy & Grails for Spring/Java developers

10

10

Page 11: Groovy & Grails for Spring/Java developers

11

11

Page 12: Groovy & Grails for Spring/Java developers

12

12

Page 13: Groovy & Grails for Spring/Java developers

13

13

Page 14: Groovy & Grails for Spring/Java developers

14

14

Page 15: Groovy & Grails for Spring/Java developers

15

15

Page 16: Groovy & Grails for Spring/Java developers

16

16

Page 17: Groovy & Grails for Spring/Java developers

17

17

Page 18: Groovy & Grails for Spring/Java developers

18

18

Page 19: Groovy & Grails for Spring/Java developers

19

19

Page 20: Groovy & Grails for Spring/Java developers

20

20

Page 21: Groovy & Grails for Spring/Java developers

21

21

Page 22: Groovy & Grails for Spring/Java developers

22

22

Page 23: Groovy & Grails for Spring/Java developers

23

23

Page 24: Groovy & Grails for Spring/Java developers

24

24

Page 25: Groovy & Grails for Spring/Java developers

25

25

Page 26: Groovy & Grails for Spring/Java developers

26

26

Page 27: Groovy & Grails for Spring/Java developers

27

27

Page 28: Groovy & Grails for Spring/Java developers

28

28

Page 29: Groovy & Grails for Spring/Java developers

29

29

Page 30: Groovy & Grails for Spring/Java developers

30

30

Page 31: Groovy & Grails for Spring/Java developers

31

31

Page 32: Groovy & Grails for Spring/Java developers

32

32

Page 33: Groovy & Grails for Spring/Java developers

33

33

Page 34: Groovy & Grails for Spring/Java developers

34

34

Page 35: Groovy & Grails for Spring/Java developers

35

35

Page 36: Groovy & Grails for Spring/Java developers

36

36

Page 37: Groovy & Grails for Spring/Java developers

37

37

Page 38: Groovy & Grails for Spring/Java developers

38

38

Page 39: Groovy & Grails for Spring/Java developers

39

39

Page 40: Groovy & Grails for Spring/Java developers

40

40

Page 41: Groovy & Grails for Spring/Java developers

41

41

Page 42: Groovy & Grails for Spring/Java developers

42

42

Page 43: Groovy & Grails for Spring/Java developers

43

43

Page 44: Groovy & Grails for Spring/Java developers

44

44

Page 45: Groovy & Grails for Spring/Java developers

45

45

Page 46: Groovy & Grails for Spring/Java developers

46

46

Page 47: Groovy & Grails for Spring/Java developers

47

47

Page 48: Groovy & Grails for Spring/Java developers

48

48

Page 49: Groovy & Grails for Spring/Java developers

49

49

Page 50: Groovy & Grails for Spring/Java developers

50

50

Page 51: Groovy & Grails for Spring/Java developers

51

51

Page 52: Groovy & Grails for Spring/Java developers

52

52

Page 53: Groovy & Grails for Spring/Java developers

53

53

Page 54: Groovy & Grails for Spring/Java developers

54

54

Page 55: Groovy & Grails for Spring/Java developers

55

55

Page 56: Groovy & Grails for Spring/Java developers

56

56

Page 57: Groovy & Grails for Spring/Java developers

57

57

Page 58: Groovy & Grails for Spring/Java developers

58

58

Page 59: Groovy & Grails for Spring/Java developers

59

59

Page 60: Groovy & Grails for Spring/Java developers

60

60

Page 61: Groovy & Grails for Spring/Java developers

• Grails for Swing applications• MVC model• SwingBuilder for views

61

application(title: 'DemoConsole', pack: true, locationByPlatform: true) { panel(border: emptyBorder(6)) { borderLayout() scrollPane(constraints: CENTER) { textArea( text: bind(target: model, targetProperty: 'scriptSource'), enabled: bind {model.enabled}, columns: 40, rows: 10) } }}

http://griffon.codehaus.org/

61

Page 62: Groovy & Grails for Spring/Java developers

Gradle

• Build tool with built-in dependency management• Conventions through plugins• Multi-project support• Full access to tasks and dependency tree• Easy to write your own tasks

– either in the build file– or via Groovy/Java classes

62

http://www.gradle.org/

62

Page 63: Groovy & Grails for Spring/Java developers

• Parallel processing for Groovy• Actors library making full use of closures

63

@Grab(group='org.codehaus.gpars', module='gpars', version='0.11')import groovyx.gpars.GParsPool

GParsPool.withPool { def animals = ['dog', 'ant', 'cat', 'whale'] println(animals.anyParallel {it ==~ /ant/} ? 'Found an ant' : 'No ants found') println(animals.everyParallel {it.contains('a')} ? 'All animals contain a' : 'Some animals can live without an a')}

http://gpars.codehaus.org/

63

Page 64: Groovy & Grails for Spring/Java developers

Try it out!

64

http://groovyconsole.appspot.com/

64

Page 65: Groovy & Grails for Spring/Java developers

What is Grails?

• Rapid Web Application Development Framework– for the JVM– with first-class Java integration

• Inspired by Ruby on Rails, Django and others– Convention over Configuration– Don’t Repeat Yourself (DRY)

65

65

Page 66: Groovy & Grails for Spring/Java developers

Grails

What is Grails?

66

Build

Web MVC GSP (Views)

GORM(Data Access)

Doc Engine

Servlet Container

Test Support

Database I18n

66

Page 67: Groovy & Grails for Spring/Java developers

Grails

What is Grails?

67

67

Page 68: Groovy & Grails for Spring/Java developers

What is Grails?

68

Web ControllersThe Domain Model

Business Logic

Custom View TagsViews & Layouts

Libraries (JARs)

Additional Sources

Web Resources

i18n bundles

Build Commands

Tests

68

Page 69: Groovy & Grails for Spring/Java developers

Say bye-bye to the plumbing!

69

69

Page 70: Groovy & Grails for Spring/Java developers

Demo

70

Page 71: Groovy & Grails for Spring/Java developers

Enterprise requirements

71

Web App

Messaging

Legacy Databases Services

JEE

Is this a problem for Grails apps?

71

Page 72: Groovy & Grails for Spring/Java developers

Build

72

• Remember the Grails project structure?– add in build events and...

Can’t build natively with other build tools!

Grails Build System

Ant GradleMaven

72

Page 73: Groovy & Grails for Spring/Java developers

Dependency DSL

grails.project.dependency.resolution = { inherits "global" log "warn" repositories { grailsHome() mavenCentral() mavenRepo "http://localhost:8081/..." } ...}

73

73

Page 74: Groovy & Grails for Spring/Java developers

Dependency DSL

grails.project.dependency.resolution = { inherits "global" log "warn" ... dependencies { runtime "mysql:mysql-connector-java:5.1.17" test "org.gmock:gmock:0.8.1" ... } plugins { compile ":spring-security-core:1.2.7" ... }}

74

74

Page 75: Groovy & Grails for Spring/Java developers

‘Legacy’ Databases

• Grails can create a database from your domain model...• ...but what if you don’t own the database?

– DBA determines structure– Company conventions– Existing ‘legacy’ database

75

75

Page 76: Groovy & Grails for Spring/Java developers

• No existing domain model• Schema not too far off the beaten track

76

Option 1: Custom ORM mapping

class Book { ... static mapping = { table "books" title type: "books" author column: "author_ref" }}

76

Page 77: Groovy & Grails for Spring/Java developers

• Existing Java/JPA domain model

Option 2: JPA annotations

77

grails-app/conf/hibernate/hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE ...><hibernate-configuration> <session-factory> <mapping class="org.ex.Book"/> <mapping class="org.ex.Author"/> ... </session-factory></hibernate-configuration>

77

Page 78: Groovy & Grails for Spring/Java developers

• You have Java model + Hibernate mapping files• Schema is way off the beaten track

78

grails-app/conf/hibernate/hibernate.cfg.xml

Option 3: Hibernate XML Mappings

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE ...><hibernate-configuration> <session-factory> <mapping resource="org.ex.Book.hbm.xml"/> <mapping resource="org.ex.Author.hbm.xml"/> ... </session-factory></hibernate-configuration>

78

Page 79: Groovy & Grails for Spring/Java developers

constraints = { title blank: false, unique: true ...}

Constraints

Given domain class:

Then:

org.example.myapp.domain.Book

src/java/org/example/myapp/domain/BookConstraints.groovy

79

79

Page 80: Groovy & Grails for Spring/Java developers

• GORM layer over JPA• Use your own JPA provider• Useful for cloud services that only work with JPA, not

Hibernate

80

Option 4: GORM JPA Plugin

80

Page 81: Groovy & Grails for Spring/Java developers

Database Migration Plugin

81

Pre-production, Hibernate ‘update’ or ‘create-drop’

dbm-generate-changelogdbm-changelog-sync

Change domain model

dbm-gorm-diffdbm-update

81

Page 82: Groovy & Grails for Spring/Java developers

Reverse Engineering Plugin

82

class Person { String name Integer age ...}

82

Page 83: Groovy & Grails for Spring/Java developers

Grails is Spring

• Spring MVC under the hood• Grails provides many useful beans

– e.g. grailsApplication• Define your own beans!

– resources.xml/groovy– In a plugin

83

83

Page 84: Groovy & Grails for Spring/Java developers

Example

import ...beans = { credentialMatcher(Sha1CredentialsMatcher) { storedCredentialsHexEncoded = true }

sessionFactory(ConfigurableLocalSessionFactoryBean) { dataSource = ref("dataSource") hibernateProperties = [ "hibernate.hbm2ddl.auto": "create-drop", "hibernate.show_sql": true ] }}

84

84

Page 85: Groovy & Grails for Spring/Java developers

Summary

• Various options for integrating Grails with:– Development/build– Deployment processes

• Works with many external systems– Solid support for non-Grailsy DB schemas– Flexible messaging & web service support

85

85

Page 86: Groovy & Grails for Spring/Java developers

More info

• w: http://grails.org/• f: http://grails.org/Mailing+Lists

• e: [email protected]• t: pledbrook• b: http://blog.springsource.com/author/peter-ledbrook/

86

86

Page 87: Groovy & Grails for Spring/Java developers

Q&A

87