1 Introduction - Reference Documentation Authors: Graeme Rocher, Peter Ledbrook, Marc Palmer, Jeff Brown, Luke Daley, Burt Beckwith, Lari Hotari Version: 3.0.17

1 Introduction

Java web development as it stands today is dramatically more complicated than it needs to be. Most modern web frameworks in the Java space are over complicated and don't embrace the Don't Repeat Yourself (DRY) principles.

Dynamic frameworks like Rails, Django and TurboGears helped pave the way to a more modern way of thinking about web applications. Grails builds on these concepts and dramatically reduces the complexity of building web applications on the Java platform. What makes it different, however, is that it does so by building on already established Java technologies like Spring and Hibernate.

An easy to use Object Relational Mapping (ORM) layer built on Hibernate

An expressive view technology called Groovy Server Pages (GSP)

A controller layer built on Spring MVC

An interactive command line environment and build system based on Gradle

An embedded Tomcat container which is configured for on the fly reloading

Dependency injection with the inbuilt Spring container

Support for internationalization (i18n) built on Spring's core MessageSource concept

A transactional service layer built on Spring's transaction abstraction

Grails is a full stack framework and attempts to solve as many pieces of the web development puzzle through the core technology and its associated plugins. Included out the box are things like:

All of these are made easy to use through the power of the Groovy language and the extensive use of Domain Specific Languages (DSLs)

1.1 What's new in Grails 3.0?

This documentation will take you through getting started with Grails and building web applications with the Grails framework. This section covers the new features that are present in 3.0 and is broken down into sections covering the build system, core APIs, the web tier, persistence enhancements and improvements in testing. Note there are many more small enhancements and improvements, these sections just cover some of the highlights.

1.1.1 Core Features

Groovy 2.4

Grails 3.0 comes with Groovy 2.4 which includes many new features and enhancements.

For more information on Groovy 2.4, see the release notes for more information.

Spring 4.1 and Spring Boot 1.2

Grails 3.0 comes with Spring 4.1 which includes many new features and enhancements

In addition, Grails 3.0 is built on Spring Boot 1.2 which provides the ability to produce runnable JAR files that can embed Tomcat, Jetty or Undertow containers.

Gradle Build System

Grails 3.0 deprecates the older Gant-based build system in favour of a new Gradle-based build that integrates closely with the Gradle plugin ecosystem

See the new section on the new Gradle build for more information.

Application Profiles

Grails 3.0 supports the notion of application profiles via a new profile repository . A profile encapsulates an application structure, set of commands, plugins and capabilities. For example the "web" profile allows construction of web applications deployable to a Servlet container. In the future more profiles will be developed targeting different environments.

See the new section on Profiles for more information.

Redesigned API based on Traits

grails.

org.grails.

The Grails API has been redesigned so that public API is correctly populated under thepackage whilst private / internal API that is subject to change can be found in thepackage. The core API has also been rewritten and based around the Groovy Traits

1.1.2 Web Features

New Interceptors API

See the new documentation on Grails 3.0's core traits for more information.

In previous versions of Grails, filters were used to define logic that intercepts controller action execution.

As of Grails 3.0, this API is deprecated and has been replaced by the new Interceptor API . An example interceptor can be seen below:

class MyInterceptor { boolean before() { true } boolean after() { true } void afterView() { // no-op } }

1.1.3 Development Environment Features

New Shell and Code Generation API

Replacing Gant, Grails 3.0 features a new interactive command line shell that integrates closely with Gradle and provides APIs for writing scripts that interact with Gradle and perform code generation.

The new shell integrates closely with the concept of application profiles with each profile capable defining profile specific commands . As with previous versions of Grails, plugins can define new shell commands that can invoke Gradle or perform code generation and project automation tasks.

See the new guide on Creating Custom Scripts for more information.

Enhanced IDE Integration

Since Grails 3.0 is built on Gradle, you can now import a Grails project using IntelliJ community edition or GGTS's Gradle tooling support without the need for Grails specific tooling. Grails 3.0 plugins are published as simple JAR files greatly reducing the need for additional IDE support specific to Grails.

Application Main Class

Application

static void main

Application

1.1.4 Testing Features

Integration and Geb Functional Tests

Each new Grails 3.0 project features anclass that has a traditionalsignature, meaning to run or debug a Grails 3.0 application from an IDE like IntelliJ or GGTS you can simply right-click on theclass and execute to start your Grails application. All Grails 3.0 tests can also just be run from the IDE directly without needing to resort to the command line (even integration / functional tests!).

Grails 3.0 supports built in support for Spock/Geb functional tests using the create-functional-test command. Functional tests are based on Spring Boot's test running mechanism and load the application just once for an entire suite of tests. The tests can be run from and IDE and don't require the command line.

Gradle Test Running

Since Grails 3.0 is built on Gradle the test execution configuration is much more flexible and can easily configured to execute in parallel.