您的位置:首页 > 编程语言 > Java开发

[译] 第六天:在Java虚拟机上用Grails进行快速Web开发

2013-12-17 18:47 302 查看

前言

30天学习30种技术的第六天,我决定学习Grails Web应用开发框架.

Grails是基于Groovy和Java的开源Web开发框架。是对流行的Rails或者Django Web框架的JVM(Java虚拟机)响应,帮助开发者应对标准Jetty或者Tomcat服务器快速巧妙开发应用。这篇博客里,我们会讲到用Grails Eclipse插件创建简单的Web应用。

为什么我们要关注Grails?

考虑学习Grails的两个原因:

快速web开发:有助于像Rails或者Django那样帮助我们高效开发,当然,要在掌握JVM和Java的前提下。

成熟的技术支持:Grails底层用Spring和Hibernate构建,可以看成是这些技术的糖衣语法。

前提准备

必要的Java基础知识。

安装最新的JDK, 可以装OpenJDK7Oracle JDK 7. OpenShift支持OpenJDK 6和7。

官网下载最新的Eclipse包,目前最新的叫做Kepler.



安装Eclipse很简单,下载安装包后解压就好,在Linux或者Mac上,打开命令器,运行以下命令:

$ tar -xzvf eclipse-jee-kepler-R-*.tar.gz

Windows上用Winzip或者7-zip解压,解压后,你会有一个eclipse文件夹,可以为可执行文件建个快捷方式。

安装Grails

请参考Grails的入门指南

我们这里用的Grails版本是2.3.1. 运行grails -version 来检查版本号。

$ grails -version
Grails version: 2.3.1


我第一运行的时候,提示一下信息。

$ grails -version
Exception in thread "main" java.lang.NoClassDefFoundError:
org/codehaus/groovy/grails/cli/support/GrailsStarter


这个异常时因为我机器上已经安装了旧版本的Grails. 在Mac上,到/usr/local/bin路径,你可能发现另外一个安装版本。我之前可能无意间用brew 安装了Grails, 现在先卸载掉。

brew uninstall grails


第一步:安装Eclipse Grails插件

为Java EE解压Eclipse Kpler IDE后,打开Eclipse,找到项目位置。打开Help>Eclipse Marketplace, 然后搜索Grails.安装 "Groovy/Grails Tool Suite(GGTS) for Eclipse Kepler(4.3)". 安装完后重启Eclipse.

第二步:新建Grails项目

这里我们建一个简单的链接分享应用。用户可以先注册然后提交链接。

新建Grails 项目步骤File>New>Grails Project,输入详细信息,命名为linkbin.

第一次创建Grails项目需要配置安装信息,点击"Configure Grails Installations" 然后添加新的安装。

也可以给项目指定不同路径,点击"Finish" 按钮。



Eclipse会问你是否要打开"Grails perspective", 点击 Yes. 项目就创建好并导入到Eclipse了。

第三步:创建领域模型

程序的领域模型非常简单。两个实体:User和Story.

User包含两块:email和fullName. 我们在Email上添加了not blank, email和unique约束。email约束确保邮件格式验证。fullName有not blank和size约束。size约束是用groovy Range 限制集合,数字,或者字符长度的大小。要新建domain类,右击domain,选择New>Domain Class.

创建User 域类,用以下代码替换User域类代码。

package linkbin

class User {
String email
String fullName
static constraints = {
email unique:true , blank : false , email:true
fullName size:5..100  , blank : false
}

}


Story 实体包含三块:link, description 和submittedOn. Link 和用户要提交的Web url相关。 Description 和 submittedOn是link 和提交日期的补充文本。我们为link 和escription添加了not blank约束,unique和url约束也加到了link里。

package linkbin

class Story {
String link
String description
Date submittedOn

static constraints = {
link url : true , blank : false ,unique : true
description size : 10..1000 , blank : false
}
}


现在给User和 Story添加关联。用户可以提交很多故事,故事属于用户,关系如下:

package linkbin
class User {
String email
String fullName
static hasMany = [stories : Story]
static constraints = {
email unique:true , blank : false , email:true
fullName size:5..100  , blank : false
}
static mapping = {
table 'users'
}
}


一个故事属于一个用户。

package linkbin
class Story {
String link
String description
Date submittedOn
static belongsTo = [user : User]
static constraints = {
link url : true , blank : false ,unique : true
description size : 10..1000 , blank : false
}
static mapping = {
table 'stories'
}

}


第四步:域类的Scaffold控制器和视图

Grails从域类生成控制器和视图很简单。要为User域类生成控制器和视图,打开"Grails Command Wizard ".



它会在能看到所有Grails 命令的地方打开命令窗口,用generate-all命令生成控制器和视图。

然后它会要求输入域类的名字,输入 linkbin.User 然后点击"Finish"按钮。

同样的,给Story域类生成控制器和视图。

Generate-all命令为所有实体生成CRUD控制器和视图。

第五步:运行程序

所有的Grails项目都嵌入到支持运行嵌入式的tomcat服务器上。在本地运行程序,右击,选择"Run as grails app".

这回启动一个嵌入式tomcat servlet容器,可以在控制台看到以下日志。

| Loading Grails 2.3.1
| Configuring classpath.
| Environment set to development.....
| Packaging Grails application.....
| Running Grails application
| Server running. Browse to http://localhost:8080/linkbin[/code] 

第六步:发布到云上

Grails 程序打包成WAR格式。OpenShift是一个公开的可扩展的开源平台。如果你用Java, Python, Node.js或者PHP, 你应该看看OpenShift. OpenShift作为公共平台服务,你可以在上面免费发布应用。

在OpenShift上发布应用之前,先做以下步骤:

OpenShift Account上注册。 OpenShift完全免费,红帽给每个用户免费提供了3个Gears来运行程序。目前,这个资源分配合计有每人1.5GB内存,3GB磁盘空间。

在本机安装rhc 客户端工具,rhc是ruby gem包,所以你需要安装1.8.7或以上版本的ruby。安装rhc,输入

sudo gem install rhc


要更新rhc,输入

sudo gem update rhc


想了解rhc command-line 工具,更多帮助参考https://openshift.redhat.com/community/developers/rhc-client-tools-install

用rhc 安装命令安装OpenShift. 执行命令可以帮你创建空间,上传ssh 密钥到OpenShift服务器。

OpenShift也有eclipse插件,只是这里我们用OpenShift rhc命令工具。

安装之后,我们可以运行以下命令来创建程序。

$ rhc create-app linkbin tomcat-7 postgresql-9.2


这会创建一个程序容器,叫gear,安装所需的SELinux策略和cgroup配置。OpenShift也会为你安装一个私有的git仓库,并克隆到本地。最后,OpenShift会把DNS 扩散到网络中。程序可访问http://linkbin-domain-name.rhcloud.com/.替换你自己唯一的OpenShift域名(有时也叫命名空间)。

我们要发布WAR文件,所以需要把OpenShift上默认的文件删除。

$ git rm -rf src/ pom.xml
$ git commit -am "deleted default source code"


到Eclipse, 用postgresql更换datasource配置。 Grails在conf/Datasource.groovy维护所有数据库配置。用PostgreSQL设置更新产品信息。

production {
dataSource {
dbCreate = "update"
driverClassName = "org.postgresql.Driver"
dialect = org.hibernate.dialect.PostgreSQLDialect
uri = new URI(System.env.OPENSHIFT_POSTGRESQL_DB_URL)
url = "jdbc:postgresql://"+uri.host+uri.path+"/"+System.env.OPENSHIFT_APP_NAME
username = System.env.OPENSHIFT_POSTGRESQL_DB_USERNAME
password = System.env.OPENSHIFT_POSTGRESQL_DB_PASSWORD
}

}


现在把所有Grails程序打包成WAR文件,使用Grails WAR 命令。打开"Grails Command Wizard",使用WAR 命令,它会要求输入文件名,取名target/ROOT.war,会在目标文件夹生成 ROOT.war,复制ROOT.war到你的OpenShift linkbin程序的webapps文件夹。

现在添加war到git仓库,发布。

$ git add .
$ git commit -am "linkbin app deployed to cloud"
$ git push


代码发布后WAR就成功部署了,可以在http://linkbin-{domain-name}.rhcloud.com看到程序。

作为程序结果演示,可以到http://linkbin-shekhargulati.rhcloud.com.

这是今天的内容. 希望对你有用,继续给意见和建议吧。

原文:https://www.openshift.com/blogs/day-6-rapid-web-development-on-the-jvm-with-grails
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: