Skip to main content

TOTD #75: Getting Started with Grails using GlassFish v3 Embedded

Posted by arungupta on March 19, 2009 at 7:06 AM PDT



For a change, this blog entry is talking about something that exists
for a while now :)



Basically, I wanted to setup a demo environment for href="http://www.grails.org/">Grails and href="https://glassfish.dev.java.net/downloads/v3-prelude.html">GlassFish
v3 Prelude on my machine and so decided to dcument the steps
along the process. More detailed steps with explanation are available
on href="http://wiki.glassfish.java.net/Wiki.jsp?page=GrailsGettingStarted">GlassFish/Grails
Getting Started Wiki.

  1. Download and unzip href="https://glassfish.dev.java.net/downloads/v3-prelude.html">GlassFish
    v3 Prelude.
  2. Run GlassFish
    Update Center
    to install the Grails module as shown:


    style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
    cellpadding="2" cellspacing="2">
    ~/demos/glassfishv3-prelude > style="font-weight: bold;">./bin/updatetool



    The software needed for this command (updatetool) is not installed.



    If you choose to install Update Tool, your system will be automatically

    configured to periodically check for software updates. If you would like

    to configure the tool to not check for updates, you can override the

    default behavior via the tool's Preferences facility.



    When this tool interacts with package repositories, some system
    information

    such as your system's IP address and operating system type and version

    is sent to the repository server. For more information please see:



    http://wiki.updatecenter.java.net/Wiki.jsp?page=UsageMetricsUC2



    Once installation is complete you may re-run this command.



    Would you like to install Update Tool now (y/n): y



    Install image: /Users/arungupta/demos/glassfishv3-prelude/bin/..

    Installing pkg packages.

    Installing: [pkg:/pkg@1.0.7,0-15.1269:20081008T212532Z,
    pkg:/python2.4-minimal@2.4.5.0,0-15.1269:20081008T212544Z]

    Installing updatetool packages.

    Installing: [pkg:/updatetool@2.0.0,0-15.1269:20081008T212613Z,
    pkg:/wxpython2.8-minimal@2.8.8,0-15.1269:20081008T212630Z]

    Registering notifier: Already registered.

    Initialization complete.



    Software successfully installed. You may now re-run this command
    (updatetool).
  3. Now run the Update Center again to see a screen as shown
    below:



    href="http://blogs.sun.com/arungupta/resource/images/grails-v3pre-uc-snapshot.png"> style="border: 1px solid ; width: 700px; height: 488px;" alt=""
    src="http://blogs.sun.com/arungupta/resource/images/grails-v3pre-uc-snapshot.png">


  4. Select "GlassFish support for Grails Framework" and click on "Install"
    to install the module locally. This creates a new directory "grails" in
    your GlassFish v3 Prelude directory and install Grails 1.0.4 there.

  5. Set environment variables as:


    style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
    cellpadding="2" cellspacing="2">
    ~/demos/glassfishv3-prelude/glassfish/grails
    >export
    GRAILS_HOME=~/demos/glassfishv3-prelude/glassfish/grails


    ~/demos/glassfishv3-prelude/glassfish/grails > style="font-weight: bold;">export PATH=$GRAILS_HOME/bin:$PATH


  6. Create a template application as:


    style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
    cellpadding="2" cellspacing="2">
    ~/demos/glassfishv3-prelude/glassfish/grails/samples
    >grails create-app
    bookstore




    Welcome to Grails 1.0.4 - http://grails.org/

    Licensed under Apache Standard License 2.0

    Grails home is set to:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails



    Base Directory:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples

    Note: No plugin scripts found

    Running script
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/scripts/CreateApp.groovy

    Environment set to development

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/src

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/src/java

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/src/groovy

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/controllers

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/services

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/domain

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/taglib

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/utils

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/views

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/views/layouts

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/i18n

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/conf

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/test

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/test/unit

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/test/integration

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/scripts

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/web-app

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/web-app/js

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/web-app/css

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/web-app/images

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/web-app/META-INF

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/lib

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/conf/spring

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/conf/hibernate

    [propertyfile] Creating new property file:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/application.properties

         [copy] Copying 2 files to
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore

         [copy] Copied 1 empty
    directory to 1 empty directory under
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore

         [copy] Copying 2 files to
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/web-app/WEB-INF

         [copy] Copying 5 files to
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/web-app/WEB-INF/tld

         [copy] Copying 28 files to
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/web-app

         [copy] Copying 18 files to
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app

         [copy] Copying 1 file to
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore

         [copy] Copying 1 file to
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore

         [copy] Copying 1 file to
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore

         [copy] Copying 1 file to
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore

    [propertyfile] Updating property file:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/application.properties

    Created Grails Application at
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore


  7. Create a domain specific class as:


    style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
    cellpadding="2" cellspacing="2">
    ~/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore
    >grails
    create-domain-class book




    Welcome to Grails 1.0.4 - http://grails.org/

    Licensed under Apache Standard License 2.0

    Grails home is set to:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails



    Base Directory:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore

    Note: No plugin scripts found

    Running script
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/scripts/CreateDomainClass.groovy

    Environment set to development

         [copy] Copying 1 file to
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/domain

    Created Domain Class for Book

         [copy] Copying 1 file to
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/test/integration

    Created Tests for Book


  8. Add attributes to the domain class by editing
    "grails-app/domain/Book.groovy" such that it looks like:


    style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
    cellpadding="2" cellspacing="2">
    class Book {

      String title

      String author

    }


  9. Create a new controller as:


    style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
    cellpadding="2" cellspacing="2">
    ~/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore
    >grails
    create-controller Book




    Welcome to Grails 1.0.4 - http://grails.org/

    Licensed under Apache Standard License 2.0

    Grails home is set to:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails



    Base Directory:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore

    Note: No plugin scripts found

    Running script
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/scripts/CreateController.groovy

    Environment set to development

         [copy] Copying 1 file to
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/controllers

    Created Controller for Book

        [mkdir] Created dir:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/views/book

         [copy] Copying 1 file to
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/test/integration

    Created ControllerTests for Book
  10. Edit the generated controller in
    "grails-app/controller/BookController.groovy" to specify scaffold for
    the domain class. It looks like:


    style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
    cellpadding="2" cellspacing="2">
    class BookController {

        def scaffold = Book

    }
  11. Run the app as shown below:


    style="text-align: left; background-color: rgb(204, 204, 255); width: 100%;"
    cellpadding="2" cellspacing="2">
    ~/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore
    >grails run-app



    Welcome to Grails 1.0.4 - http://grails.org/

    Licensed under Apache Standard License 2.0

    Grails home is set to:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails



    Base Directory:
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore

    Note: No plugin scripts found

    Running script
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/scripts/RunApp.groovy

    Environment set to development

    Starting
    GlassFish embedded server
    ...   
    [mkdir] Created dir:
    /Users/arungupta/.grails/1.0.4/projects/bookstore/classes

      [groovyc] Compiling 8 source files to
    /Users/arungupta/.grails/1.0.4/projects/bookstore/classes

        [mkdir] Created dir:
    /Users/arungupta/.grails/1.0.4/projects/bookstore/resources/grails-app/i18n

    [native2ascii] Converting 11 files from
    /Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/grails-app/i18n
    to
    /Users/arungupta/.grails/1.0.4/projects/bookstore/resources/grails-app/i18n

         [copy] Copying 1 file to
    /Users/arungupta/.grails/1.0.4/projects/bookstore/classes

         [copy] Copying 1 file to
    /Users/arungupta/.grails/1.0.4/projects/bookstore/resources

         [copy] Copying 1 file to
    /Users/arungupta/.grails/1.0.4/projects/bookstore

    Running Grails application..

    Application name : bookstore

    Web App Root
    :/Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/web-app

    web.xml:/Users/arungupta/.grails/1.0.4/projects/bookstore/resources/web.xml

    Mar 18, 2009 10:19:09 PM CommonClassLoaderManager Skipping creation of
    CommonClassLoader as there are no libraries available

    INFO: urls = []

    no resource bundle found for version, using default GlassFish version

    Mar 18, 2009 10:19:09 PM AppServerStartup run

    INFO: [Thread[GlassFish Kernel Main Thread,5,main]] started

    Mar 18, 2009 10:19:09 PM
    com.sun.enterprise.v3.services.impl.GrizzlyProxy start

    INFO: Listening on port 8080

    Mar 18, 2009 10:19:10 PM
    org.glassfish.admin.mbeanserver.ConnectorStartupService$ConnectorsStarterThread
    startConnector

    INFO: Started JMXConnector, JMXService URL =
    service:jmx:rmi:///jndi/rmi://192.168.1.145:8686/jmxrmi

    Mar 18, 2009 10:19:10 PM
    com.sun.enterprise.v3.admin.adapter.AdminEndpointDecider
    setGuiContextRoot

    INFO: Admin Console Adapter: context root: /admin

    Mar 18, 2009 10:19:10 PM com.sun.enterprise.v3.server.AppServerStartup
    run

    INFO: GlassFish
    v3 Prelude startup time : Embedded(418ms) startup services(887ms)
    total(1305ms)


    Mar 18, 2009 10:19:10 PM com.sun.enterprise.web.WebContainer
    createHttpListener

    INFO: Created HTTP listener http-listener-1 on port 8080

    Mar 18, 2009 10:19:10 PM com.sun.enterprise.web.WebContainer createHosts

    INFO: Created virtual server server

    Mar 18, 2009 10:19:11 PM org.apache.catalina.loader.WebappLoader
    setClassPath

    INFO: Unknown loader org.glassfish.grails.MaskingClassLoader@3b948e75
    class org.glassfish.grails.MaskingClassLoader

    Mar 18, 2009 10:19:12 PM org.apache.catalina.loader.WebappLoader
    setClassPath

    INFO: Unknown loader
    org.glassfish.internal.api.DelegatingClassLoader@191fa2af class
    org.glassfish.internal.api.DelegatingClassLoader

    Mar 18, 2009 10:19:12 PM org.apache.catalina.core.ApplicationContext log

    INFO: PWC1412: WebModule[/bookstore] ServletContext.log():Set web app
    root system property: 'bookstore-development-0.1' =
    [/Users/arungupta/demos/glassfishv3-prelude/glassfish/grails/samples/bookstore/web-app/]

    Mar 18, 2009 10:19:12 PM org.apache.catalina.core.ApplicationContext log

    INFO: PWC1412: WebModule[/bookstore] ServletContext.log():Initializing
    log4j from
    [file:/Users/arungupta/.grails/1.0.4/projects/bookstore/resources/log4j.properties]

    Mar 18, 2009 10:19:12 PM org.apache.catalina.core.ApplicationContext log

    INFO: PWC1412: WebModule[/bookstore] ServletContext.log():Initializing
    Spring root WebApplicationContext

    [0] spring.GrailsWebApplicationContext Refreshing
    org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@430b4506:
    display name
    [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@430b4506];
    startup date [Wed Mar 18 22:19:14 PDT 2009]; parent:
    org.springframework.web.context.support.XmlWebApplicationContext@6ceb51a8

    [0] spring.GrailsWebApplicationContext Bean factory for application
    context
    [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@430b4506]:
    org.springframework.beans.factory.support.DefaultListableBeanFactory@1f43243e

    Mar 18, 2009 10:19:17 PM org.apache.catalina.core.ApplicationContext log

    INFO: PWC1412: WebModule[/bookstore] ServletContext.log():Initializing
    Spring FrameworkServlet 'grails'

    Mar 18, 2009 10:19:17 PM com.sun.enterprise.web.WebApplication start

    INFO: Loading application bookstore at /bookstore

    Server running. Browse to http://localhost:8080/bookstore



    Notice, here GlassFish v3 Embedded Server is used for running the
    application. It is now accessible at "http://localhost:8080/bookstore"
    and looks like:



    href="http://blogs.sun.com/arungupta/resource/images/grails-v3pre-book-controller.png"> style="border: 1px solid ; width: 700px; height: 262px;" alt=""
    src="http://blogs.sun.com/arungupta/resource/images/grails-v3pre-book-controller.png">


  12. Clicking on the "BookController" shows:



    href="http://blogs.sun.com/arungupta/resource/images/grails-v3pre-book-scaffold.png"> style="border: 1px solid ; width: 700px; height: 287px;" alt=""
    src="http://blogs.sun.com/arungupta/resource/images/grails-v3pre-book-scaffold.png">
  13. Click on "New Book" to add a new book as:



    alt=""
    src="http://blogs.sun.com/arungupta/resource/images/grails-v3pre-book-new.png">
  14. Each entry can be updated/deleted after clicking on
    "Create" ...



    alt=""
    src="http://blogs.sun.com/arungupta/resource/images/grails-v3pre-book-edit.png">



    or "Book List" as shown below:



    alt=""
    src="http://blogs.sun.com/arungupta/resource/images/grails-v3pre-book-list.png">


In a matter of few minutes, we created a simple href="http://grails.org/Scaffolding">Grails scaffold
that runs using GlassFish
v3 Embedded Server
.



Please leave suggestions on other TOTD (Tip Of The Day) that
you'd like to see.
A complete archive of all tips is available href="http://blogs.sun.com/arungupta/tags/totd">here.




Technorati: totd
glassfish
v3 href="http://technorati.com/tags/grails">grails href="http://technorati.com/tags/embedded">embedded
prelude

Related Topics >>