Skip to main content

TOTD #31: CRUD Application using Grails - Hosted on GlassFish and MySQL

Posted by arungupta on April 23, 2008 at 7:00 AM PDT

#30 explained how to create CRUD application using href="">Grails and hosted using
in-built Jetty servlet
and in-memory HSQLDB
database. Jetty and HSQLDB are built into Grails and allows to start easily.
You can also use href="">GlassFish and
MySQL for deploying your applications in
production environment.

This blog entry walks you through the steps of deploying a Grails
application on GlassFish and MySQL.

  1. If MySQL
    is already installed, then download href="">GlassFish
    v2 UR1. Otherwise you can also Download href="">GlassFish v2 UR1
    and MySQL co-bundle
    from usual Download
    ( href="">instructions).
  2. Configure MySQL database
    1. Download MySQL Connector/J 5.1.6 from href="">here.
    2. Extract the bundle and copy
      "mysql-connector-java-5.1.6-bin.jar" to the "lib" directory of Grails
    3. Start MySQL database as:

      cellpadding="2" cellspacing="2">
      /usr/local/mysql/bin/mysqld_safe --user root --console

      Starting mysqld daemon with databases from /usr/local/mysql/data
    4. Create database by giving the following command:

      cellpadding="2" cellspacing="2">
      create crudProd --user root
  3. Configure the Application
    1. Edit
      "grails-app/conf/DataSource.groovy" to specify MySQL
      configuration. The updated file looks like (changes highlighted in style="font-weight: bold;">bold):

      cellpadding="2" cellspacing="2">

      pooled = false

      driverClassName = "com.mysql.jdbc.Driver"

      username = "root"

      password = ""

              style="font-weight: bold;">dialect =


      hibernate {





      // environment specific settings

      environments {

      development {

      dataSource {

      dbCreate = "create-drop" // one of 'create', 'create-drop','update'

      url = "jdbc:hsqldb:mem:devDB"



      test {

      dataSource {

      dbCreate = "update"

      url = "jdbc:hsqldb:mem:testDb"



      production {

      dataSource {

      dbCreate = "update"

      url = "jdbc:mysql://localhost/crudProd"




    2. Being in production, it's recommended to use href="">InnoDB
      tables instead of
      tables. This can be easily specified by using the dialect as
      explained href="">here.
      More details about the contents of "DataSource.groovy" can be found

    3. Create a WAR by giving the following command:

      cellpadding="2" cellspacing="2">
      >grails war style="font-weight: bold;">

      Welcome to Grails 1.0.2 -

      Licensed under Apache Standard License 2.0

      Grails home is set to: /Users/arungupta/testbed/grails-1.0.2

      Base Directory: /Users/arungupta/testbed/grails-1.0.2/samples/crud

      Note: No plugin scripts found

      Running script /Users/arungupta/testbed/grails-1.0.2/scripts/War.groovy

      Environment set to production

         [delete] Deleting:

         [delete] Deleting directory

      . . .

      Updating property file:

          [mkdir] Created dir:

           [copy] Warning:
      /Users/arungupta/testbed/grails-1.0.2/samples/crud/plugins not found.

            [jar] Building jar:

         [delete] Deleting directory

      Done creating WAR
  4. Deploy the WAR file as:

    cellpadding="2" cellspacing="2">
    deploy crud-0.1.war

    crud-0.1 deployed successfully

    Command deploy executed successfully.

    The application is now accessible at "http://localhost:8080/crud-0.1"
    and looks like:


  5. READ - Click on "StateController" and the following page is

  6. CREATE - Click on "New State" and enter the values as shown


    and click on "Create" to see the following page:

  7. UPDATE & DELETE - You can click on "Edit" or
    "Delete" to perform U or D of CRUD or click
    on "State List" to view the updated list.

Please leave suggestions on other TOTD that you'd like to see.
A complete archive is available href="">here.

Technorati: groovy
mysql href="">scripting

Related Topics >>


Thanks Carol, fixed the typo!

Arun, nice example. I got it running, but I think I found a typo in your instructions, you say create crudDev then you say the url is crudProd. These 2 should be the same right? mysqladmin create crudDev url = "jdbc:mysql://localhost/crudProd"