Tuesday April 22, 2008
TOTD #30: CRUD Application using Grails - Hosted on Jetty and HSQLDB
After a simple
Grails application, let's create a CRUD
application. Such an application allows to perform basic database
operations to read table rows from the database, create new rows, and
edit and delete existing rows. This blog shows how such an application
can be created using Grails, hosted on built-in Jetty servlet engine
and use in-memory HSQLDB
database for persistence.
A follow-up entry will show how this application can be deployed in
production mode on GlassFish
and using MySQL database.
| ~/testbed/grails-1.0.2/samples
>grails create-app
crud Welcome to Grails 1.0.2 - http://grails.org/ 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 Note: No plugin scripts found Running script /Users/arungupta/testbed/grails-1.0.2/scripts/CreateApp.groovy Environment set to development [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/src [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/src/java [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/src/groovy [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app/controllers [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app/services [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app/domain [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app/taglib [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app/utils [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app/views [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app/views/layouts [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app/i18n [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app/conf [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/test [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/test/unit [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/test/integration [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/scripts [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/web-app [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/web-app/js [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/web-app/css [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/web-app/images [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/web-app/META-INF [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/lib [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app/conf/spring [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app/conf/hibernate [propertyfile] Creating new property file: /Users/arungupta/testbed/grails-1.0.2/samples/crud/application.properties [copy] Copying 2 files to /Users/arungupta/testbed/grails-1.0.2/samples/crud [copy] Copying 2 files to /Users/arungupta/testbed/grails-1.0.2/samples/crud/web-app/WEB-INF [copy] Copying 5 files to /Users/arungupta/testbed/grails-1.0.2/samples/crud/web-app/WEB-INF/tld [copy] Copying 87 files to /Users/arungupta/testbed/grails-1.0.2/samples/crud/web-app [copy] Copying 17 files to /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app [copy] Copying 1 file to /Users/arungupta/testbed/grails-1.0.2/samples/crud [copy] Copying 1 file to /Users/arungupta/testbed/grails-1.0.2/samples/crud [copy] Copying 1 file to /Users/arungupta/testbed/grails-1.0.2/samples/crud [propertyfile] Updating property file: /Users/arungupta/testbed/grails-1.0.2/samples/crud/application.properties Created Grails Application at /Users/arungupta/testbed/grails-1.0.2/samples/crud |
| ~/testbed/grails-1.0.2/samples/crud
>grails
create-domain-class state Welcome to Grails 1.0.2 - http://grails.org/ 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/CreateDomainClass.groovy Environment set to development [copy] Copying 1 file to /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app/domain Created for State [copy] Copying 1 file to /Users/arungupta/testbed/grails-1.0.2/samples/crud/test/integration Created Tests for State |
| class
State { } |
| class
State { String name String abbrev } |
| class
BootStrap { def init = { servletContext -> new State(name:"California", abbrev:"CA").save() new State(name:"New York", abbrev:"NY").save() new State(name:"Texas", abbrev:"TX").save() new State(name:"Wisconsin", abbrev:"WI").save() } def destroy = { } } |
| ~/testbed/grails-1.0.2/samples/crud
>grails
create-controller state Welcome to Grails 1.0.2 - http://grails.org/ 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/CreateController.groovy Environment set to development [copy] Copying 1 file to /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app/controllers Created Controller for State [mkdir] Created dir: /Users/arungupta/testbed/grails-1.0.2/samples/crud/grails-app/views/state [copy] Copying 1 file to /Users/arungupta/testbed/grails-1.0.2/samples/crud/test/integration Created ControllerTests for State |
| class
StateController { def index = { } } |
| class
StateController { def scaffold = State } |
| ~/testbed/grails-1.0.2/samples/crud
>grails run-app Welcome to Grails 1.0.2 - http://grails.org/ 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/RunApp.groovy Environment set to development Running Grails application.. 2008-04-18 17:26:29.962::INFO: Logging to STDERR via org.mortbay.log.StdErrLog 2008-04-18 17:26:29.075::INFO: jetty-6.1.4 2008-04-18 17:26:29.155::INFO: No Transaction manager found - if your webapp requires one, please configure one. 2008-04-18 17:26:30.886:/crud:INFO: Set web app root system property: 'crud' = [/Users/arungupta/testbed/grails-1.0.2/samples/crud/web-app/] 2008-04-18 17:26:30.886:/crud:INFO: Initializing Log4J from [file:/Users/arungupta/.grails/1.0.2/projects/crud/resources/log4j.properties] 2008-04-18 17:26:30.945:/crud:INFO: Initializing Spring root WebApplicationContext [0] spring.GrailsWebApplicationContext Refreshing org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@848dfb: display name [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@848dfb]; startup date [Fri Apr 18 17:26:32 PDT 2008]; parent: org.springframework.web.context.support.XmlWebApplicationContext@cddcc3 [1] spring.GrailsWebApplicationContext Bean factory for application context [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@848dfb]: org.springframework.beans.factory.support.DefaultListableBeanFactory@11f136 2008-04-18 17:26:34.655:/crud:INFO: Initializing Spring FrameworkServlet 'grails' 2008-04-18 17:26:35.716::INFO: Started SelectChannelConnector@0.0.0.0:8080 Server running. Browse to http://localhost:8080/crud |





Please leave suggestions on other TOTD that you'd like to see. A complete archive is available here.
Technorati: groovy grails glassfish jetty hsqldb scripting crudPosted by Arun Gupta in web2.0 | Comments[6]
|
|
|
|
|
Today's Page Hits: 2957
Total # blog entries: 931
Posted by Arun Gupta's Blog on April 23, 2008 at 07:02 AM PDT #
hi , you made a typo, it should be String in the class state :
class State {
string name
string abbrev
}
Posted by carol mcdonald on April 25, 2008 at 09:39 AM PDT #
Thanks Carol, fixed the typo!
Posted by Arun Gupta on April 25, 2008 at 10:25 AM PDT #
Hey Arun,
I have come across these simple steps in the grails official site itself. It would more helpful if you please explain how to create a full fledged application with grails because that is something I have not come across yet. I want to use grails but I am not quite sure how to introduce application features into it. And also please describe which groovy command to use when.
Cheers!
Posted by nitinpai on April 26, 2008 at 12:40 PM PDT #
Posted by Carol McDonald's Blog on April 28, 2008 at 07:37 PM PDT #
Posted by Carol McDonald's Blog on July 07, 2008 at 07:56 PM PDT #