groovy & grails for spring/java developers

87
Groovy & Grails for Java developers Peter Ledbrook, Developer Advocate [email protected] / @pledbrook © 2012 SpringOne 2GX. All rights reserved. Do not distribute without permission. 1

Upload: peter-ledbrook

Post on 10-May-2015

1.349 views

Category:

Technology


2 download

DESCRIPTION

Presentation given at SpringOne 2GX. The original presentation is mostly demo, but these slides show some nice features of Groovy and how Grails can support the varying needs to enterprise 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