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

前言

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

 

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

为什么我们要关注Grails?

考虑学习Grails的两个原因:

  1. 快速web开发:有助于像Rails或者Django那样帮助我们高效开发,当然,要在掌握JVMJava的前提下。
  2. 成熟的技术支持:Grails底层用SpringHibernate构建,可以看成是这些技术的糖衣语法。

前提准备

  1. 必要的Java基础知识。
  2. 安装最新的JDK, 可以装OpenJDK7Oracle JDK 7. OpenShift支持OpenJDK 67
  3. 官网下载最新的Eclipse包,目前最新的叫做Kepler.

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

安装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" 按钮。

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

 

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

第三步:创建领域模型

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

 

User包含两块:emailfullName. 我们在Email上添加了not blank, emailunique约束。email约束确保邮件格式验证。fullNamenot blanksize约束。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 submittedOnlink 和提交日期的补充文本。我们为link escription添加了not blank约束,uniqueurl约束也加到了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 ".

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

它会在能看到所有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

第六步:发布到云上

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

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

  1. OpenShift      Account上注册。 OpenShift完全免费,红帽给每个用户免费提供了3个Gears来运行程序。目前,这个资源分配合计有每人1.5GB内存,3GB磁盘空间。
  2. 在本机安装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

  1. 用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文件夹。 

 

现在添加wargit仓库,发布。

$ 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

你可能感兴趣的:(JAVA虚拟机)