About me
Paul Bakker
EJB 3
• Trainer Info Support
JSF
• Java Magazine author Seam
• Big time Groovy fan ;-) JavaFX
Spring
Hibernate
Flex
Outline
• Freshing up your Groovy knowledge
• Real life Groovy examples
–Test Data
–Database conversion
–Unit Testing
• A leap of faith
–A Groovy web service client
–Generating XML
–A Groovy session bean
So what was Groovy again?
• A dynamic language
• Compiles to byte code
• Running in the JVM
• Completely compatible with Java
Lists
Maps
The Groovy 101
Closures
Meta Programming:
The Expando
Meta Programming:
Changing behavior at runtime
Groovy’s strong points
• Working with collections
• Changing behavior at runtime
• The builder pattern
• It’s all just Java
Generating test data
• Populate a database with test data
• Automated & Repeatable
• You might use DBUnit
–That’s a lot of XML...
Generating test data
The problem:
Database conversion
Old legacy schema
Redesigned schema for new application
• Reuse most of the data
• Don’t loose references
• But don’t limit new mappings
The schema
MESSAGE ATTACHMENT
1
MESSAGE message_id message_id
*
subject file_id
message_id
body
subject
* *
user_id
body
1
firstname
lastname
FILE
username
USER
attachment
file_id
user_id
1 filename
username data
firstname
lastname
email
A Groovy SQL script
Running the script
• Compile the script
• Jar the class files
• Add Groovy.jar dependency
• java -jar GroovyDBScript.jar
Unit Testing
• Mocking is really useful
–But it’s quite a lot of work
• Groovy’s dynamic nature and Meta
Programming helps
The Java class to test
The Java Unit Test
The Groovy Unit Test
Making untestable code testable
• Replace Java code at joint points
–Replace direct service calls with a Groovy proxy
Groovy Java Service
Java Class
Proxy delegate
A leap of faith
• Replace some Java code by more readable
Groovy code
• XML Converters
• A Groovy web service client
• A Groovy EJB3 Session bean
A Groovy web service client
Using the Groovy Service
getTitles(“Java”)
[“Effective Java”, ...]
A Groovy Session Bean
Replace any Java code
A warning about domain classes
Don’t forget about the metaClass property
Serialize
Groovy ActionScript
domain class class
Must have
metaClass
property!
GANT
• ANT without XML
• More natural build definition
• Use control structures
• Works in every build environment
Just get the Groove
• Groovy makes a lot of tasks easier
• Fits in most environments
• Use Groovy where it really adds value
Should we ever write Java code?
• More readable code
• Better unit testing
• Advanced frameworks
• Not everybody knows Groovy
• No static code analysis
0 comments
Post a comment