9781449323936
index.html

Programming Grails

Burt Beckwith

Revision History
2012-04-25
Early release revision 1

Preface
Conventions Used in This Book
Using Code Examples
Safari® Books Online
How to Contact Us
1. Introduction to Groovy
Installing Groovy
Groovy console
Optional Typing
Collections and Maps
Properties
Decompiling with JD-GUI
Decompiling with javap
Closures
Interface Coercion
Programmatic Closures
Owner, Delegate, and this
Groovy’s Contributions in the War Against Verbosity
Constructors
Checked Exceptions
Groovy Truth
Semicolons
Optional return
Scope
Parentheses
Default Imports
Differences between Java and Groovy
Array Initialization
in and def keywords
do/while
for loop
Annotations
Groovy Equality
Multimethod Dispatch
Groovy Strings
static "this"
The Groovy JDK (GDK)
DefaultGroovyMethods and InvokerHelper
Metaprogramming and the MOP
Adding methods
Intercepting Method Calls
Operators
Null-safe Dereference
Elvis
Spread
Spaceship
Field Access
as
in
Method Reference
Overload your Operators
Being too groovy
def Considered Harmful
Closures vs Methods
2. Introduction to Grails
3. Persistence
Data Mapping
Non-persistent domain classes
Data Validation
Transients
Mapping Collections
4. Spring
Inversion of Control and Dependency Injection
Complex dependency configuration using Spring SpEL
Manually injecting dependencies at runtime
Bean Scopes
Transactional Services
@Transactional
Transaction proxies
Transaction utility methods
Bean lifecycles and interfaces
Bean PostProcessors
A Groovier way
Bean Aliases
Internationalization
Standard and Custom Events
Resources
Resource dependency injection
Data Binding and Validation
Database persistence
Thread-local holders
JdbcTemplate
Other database support
Marshalling XML using O/X Mappers
Spring MVC
Filters
Using Spring MVC Controllers
Remoting
Client access
JMS
EJBs
JMX
Email
Cache Abstraction
5. Hibernate
Mapping domain classes
Dialects
Dialect Autodetection
Dialect Customization
Hibernate without GORM
hibernate.cfg.xml
HibernateUtil
Author
Book
Experimenting with the APIs
The Session
withSession
withNewSession
Open Session in View
Disabling OSIV
Custom User Types
Optimistic and Pessimistic Locking
Deprecated Session.connection() method
schema-export
SQL Logging
Proxies
equals, hashCode, and compareTo
Caching
Examples
Caching API
Query Caching Considered Harmful?
HQL
executeQuery
Query syntax
Report Queries
Aggregate functions
Expressions
Collections
Session.createFilter()
Custom Configurations
Mapping Views and Sub-select Classes
Sub-select domain classes
Selecting with a POGO
get(), load(), and read()
get()
load()
read()
Performance
Caching
Lazy loading
Transactional Write-Behind
6. Integration
JMS
XA support with the Atomikos plugin
Mail
Sending emails
Sending emails asynchronously
Sending emails from Log4j
SOAP Web Services
The server application
The client application
TCPMon
REST
TCPMon
EJBs
JMX
7. Configuration
External config files
Loading the configuration
Partitioning config files
Splitting resources.groovy
Modularizing within resources.groovy
Environment-specific Spring beans
beans closures in Config.groovy
Options for BuildConfig.groovy
Adding additonal source folders
Extra folders under grails-app
8. Plugins
Creating a plugin
Initial steps
The Plugin descriptor
Metadata
Lifecycle callbacks
Splitting applications into plugins
Inline plugins
Building and Releasing
Automated testing
Custom Plugin Repositories
Plugin Documentation
Custom Artifacts
9. Security
OWASP
A1-Injection
A2: Cross-Site Scripting (XSS)
A3: Broken Authentication and Session Management
A4: Insecure Direct Object References
A5: Cross-Site Request Forgery (CSRF)
A6: Security Misconfiguration
A7: Insecure Cryptographic Storage
A8: Failure to Restrict URL Access
A9: Insufficient Transport Layer Protection
A10: Unvalidated Redirects and Forwards
Security Plugins
spring-security-core
Other plugins and libraries
General Best Practices
10. The Cloud
Cost Savings
Cloud Foundry
Database applications
Scaling
NoSQL, RabbitMQ, and Searchable
Monitoring and the Cloud Foundry UI plugin
Heroku
Database applications
Scaling
11. AOP
Grails Filters
HTTP Filters
Groovy AOP
Registering metaclass interceptors
Error code URL mappings
Spring AOP
Enabling Spring AOP
Defining Aspectj-annotated aspects
Compile-time weaving
12. Upgrading Applications and Plugins
Why Doesn’t the upgrade Script Do More?
A General Approach to Upgrading
Upgrading Petclinic - A Case Study
A Short History of Grails
Grails 1.2
Grails 1.2.2
Grails 1.2.4
Grails 1.3
Grails 1.3.1
Grails 1.3.2
Grails 1.3.4
Grails 1.3.6
Grails 1.3.7
Grails 1.3.8
Grails 1.3.9
Grails 2.0
Notes on upgrading
Plugins
Site last updated on: December 11, 2012 at 11:47:18 AM PST
Cover for Programming Grails