Services — Business logic

Services hold transactional logic. Example:

package bookstore

import grails.gorm.transactions.Transactional

@Transactional
class BookService {
    def listPopular() {
        Book.where { pages > 300 }.list(max:10, sort:'published', order:'desc')
    }

    def addBook(Map data) {
        def b = new Book(data)
        b.save(failOnError:true)
    }
}

Services are injected into controllers automatically by name.