TOTD #75:使用 GlassFish v3 Embedded 的 Grails 入门指导
改变一下风格,这篇博客讨论的是现在已经存在一段时间的问题:)
基本上说,我想在计算机上安装一个用于 Grails 和 GlassFish v3 Prelude的demo 环境,于是决定记录下来整个过程的步骤。有关详细步骤说明,可在GlassFish/Grails Getting Started Wiki 上获得。
1.下载并解压缩 GlassFish v3 Prelude。
2.运行 GlassFish Update Center 并安装 Grails 模块,如下所示:
|
~/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).
|
3.现在再次运行 Update Center 可查看如下所示截屏:
选择 "GlassFish support for Grails Framework",然后单击 "Install" 可本地安装该模块。这将会在GlassFish v3 Prelude 目录中建立一个新目录 "grails",然后将 Grails 1.0.4 安装在其中。
4.按照如下所示安装环境变量:
|
~/demos/glassfishv3-prelude/glassfish/grails >export GRAILS_HOME=~/demos/glassfishv3-prelude/glassfish/grails ~/demos/glassfishv3-prelude/glassfish/grails >export PATH=$GRAILS_HOME/bin:$PATH
|
5.创建应用程序模板:
|
~/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
|
6.创建一个域特定的类:
|
~/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
|
7.通过编辑"grails-app/domain/Book.groovy" 将属性添加到域类,如此便如下所示:
|
class Book { String title String author }
|
8.新建一个控制器:
|
~/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
|
9.在 "grails-app/controller/BookController.groovy" 中编辑生成的控制器来指定域类的scaffold。它显示如下:
|
class BookController { def scaffold = Book }
|
10. 如下所示运行 app:
|
~/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
|
请注意,此处的 GlassFish v3 Embedded Server 用于运行该应用程序。现在可在 "http://localhost:8080/bookstore" 获得该信息,如下所示:
11. 单击 "BookController",显示:
12. 单击 "New Book" 可添加新书:
13. 单击 "Create" 后,可更新/删除每一个条目...
"Book List" 显示如下:
花费几分钟时间,我们就可创建一个简单的使用GlassFish v3 Embedded Server运行的 Grails scaffold。
请对其他您想查看的TOTD (今日技巧) 留下建议。所有技巧的完整存档可在此处获得。
【本文翻译仅为外语学习及阅读目的,原文作者个人观点与译者及译言网无关】