← All courses

🌱 Grails

The framework you inherited, or the one DataPallas custom work is written in — convention over configuration on Spring Boot, GORM in depth, why save() returns null instead of throwing, the N+1 that looks like a field access, and changing an application you did not write without breaking it.

No lessons published yet — this is the roadmap, so you can see exactly what the course will cover before it lands.

Before you start: Spring Boot — Series 1, and Series 2. Grails is Spring Boot underneath, and the second time something behaves strangely the answer will be a bean or an auto-configuration. Series 2 in particular — reading why a bean exists — is what turns this framework from magic into a system you can debug.

Before you start: Java & Groovy for Data — Series 1, and Series 4. GORM is Hibernate wearing Groovy, so the persistence context, lazy loading and the N+1 are assumed here rather than taught. Series 4 is where they were taught.

Short on time? The 20 episodes marked core are the shortest path to being productive at work. Start there and pick up the rest whenever a job asks for them.


Series 1 · The Application and Its Conventions

the layout, the command line, and what convention actually means

  1. 01

    Convention Over Configuration — Why the Folder a Class Sits In Is the Wiring

    coreintermediatecoming soon
  2. 02

    The CLI and the Build — Getting an Application You Did Not Write to Start

    coreintermediatecoming soon
  3. 03

    Domain Classes — Constraints, the Mapping Block, and Where the Schema Comes From

    coreintermediatecoming soon
  4. 04

    Controllers, Data Binding and Command Objects — and the Field You Did Not Mean to Expose

    coreintermediatecoming soon
  5. 05

    Services Are Transactional by Default — Where the Work Belongs, and Where It Commits

    coreintermediatecoming soon
  6. 06

    Project — Add One Screen and One Table to an Application You Did Not Write

    coreintermediate#projectcoming soon

Series 2 · GORM, in Depth

the largest part of the guide, and of the job

  1. 01

    Four Ways to Ask — Dynamic Finders, where, Criteria and HQL

    coreadvancedcoming soon
  2. 02

    hasMany, belongsTo and Cascade — What the Keyword Did to Your Delete

    coreadvancedcoming soon
  3. 03

    save() Returns null — the Silent Data Loss in Half the Grails Code in the World

    coreadvancedcoming soon
  4. 04

    The Session Underneath — Why a Load of 100,000 Rows Runs Out of Memory

    coreadvancedcoming soon
  5. 05

    The N+1 Through GORM — When a Field Access Is Secretly a Query

    coreadvancedcoming soon
  6. 06

    Migrations — Turning dbCreate Off Before Production Turns It Off for You

    coreadvancedcoming soon
  7. 07

    Project — Import a Large File Through the Domain Model Without Exhausting Memory

    coreadvanced#projectcoming soon

Series 3 · Grails as a Back End

URL mappings, JSON, interceptors and security

  1. 01

    UrlMappings — the Fastest Map of an Application You Inherited

    coreadvancedcoming soon
  2. 02

    JSON Views — Why Rendering a Domain Object Leaks Fields and Fires Queries

    coreadvancedcoming soon
  3. 03

    Interceptors — One Place for the Thing Every Request Needs

    advancedcoming soon
  4. 04

    Spring Security in Grails — Roles, the Request Map, and Binding as a Hole

    coreadvancedcoming soon
  5. 05

    Background Work — and Why a Detached Domain Object Throws on the Other Thread

    advancedcoming soon
  6. 06

    Project — Expose an Inherited Domain Model as a Shaped, Secured JSON API

    coreadvanced#projectcoming soon

Series 4 · Testing, Plugins and Shipping

changing an inherited application safely, and getting it out

  1. 01

    Unit, Integration and Functional — What to Write First on Code With No Tests

    coreadvancedcoming soon
  2. 02

    resources.groovy — Where the Conventions Stop and Spring Boot Starts

    advancedcoming soon
  3. 03

    Plugins — What They Contribute, and Checking the Last Release Date First

    advancedcoming soon
  4. 04

    Jar or War — Building It, Configuring It Outside, and Handing It Over

    coreadvancedcoming soon
  5. 05

    Upgrading, or Not — Deciding Honestly What to Do With an Application You Inherited

    advancedcoming soon
  6. 06

    Project — Change Behaviour in an Inherited Application, Test First

    coreadvanced#projectcoming soon

Not here, on purpose

  • The Groovy language itself — covered in Java & Groovy for Data, Series 1
  • Hibernate's own behaviour — the persistence context, lazy loading, the N+1, batching — covered in Java & Groovy for Data, Series 4. In this course, Series 2 · 20 shows where GORM hides that behaviour rather than re-teaching it
  • The container, auto-configuration, Actuator and packaging — covered in Spring Boot, which this course assumes. In this course, Series 4 · 05 covers only where Grails and Spring meet
  • Front-end frameworks and single-page applications — not covered. Series 3 teaches Grails as a JSON back end, which is how most Grails applications are now used; Next.js is the front end on this shelf
  • Running the server and the database — covered in Data Ops