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
Grails and
GlassFish
v3 Prelude on my machine and so decided to dcument the steps
along the process. More detailed steps with explanation are available
on
GlassFish/Grails
Getting Started Wiki.
- Download and unzip GlassFish
v3 Prelude.
- Run GlassFish
Update Center to install the Grails module as shown:
~/demos/glassfishv3-prelude >./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). |
- Now run the Update Center again to see a screen as shown
below:

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.
- Set environment variables as:
~/demos/glassfishv3-prelude/glassfish/grails
>export
GRAILS_HOME=~/demos/glassfishv3-prelude/glassfish/grails
~/demos/glassfishv3-prelude/glassfish/grails >export PATH=$GRAILS_HOME/bin:$PATH |
- Create a template application as:
~/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 |
- Create a domain specific class as:
~/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 |
- Add attributes to the domain class by editing
"grails-app/domain/Book.groovy" such that it looks like:
class Book {
String title
String author
} |
- Create a new controller as:
~/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 |
- Edit the generated controller in
"grails-app/controller/BookController.groovy" to specify scaffold for
the domain class. It looks like:
class BookController {
def scaffold = Book
} |
- Run the app as shown below:
~/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:

- Clicking on the "BookController" shows:

- Click on "New Book" to add a new book as:

- Each entry can be updated/deleted after clicking on
"Create" ...

or "Book List" as shown below:

In a matter of few minutes, we created a simple
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
here.
Technorati: totd
glassfish
v3 grails embedded
prelude