如果您并不熟悉 Ruby on Rails,那么切记它与 Java 没有任何关系,它是一个基于 Ruby 的框架。Ruby on Rails 确实很吸引人、功能强大以及……但作为 Java 开发人员,我希望使用 Java(或等效语言)执行相同操作,从而利用我在 J2EE 中的投资。我还希望能够部署和管理使用 Oracle Enterprise Manager Application Server Control 等工具以这种方式开发的应用程序。
一种新框架的开发中已经利用了 Ruby on Rails 所遵循的“按照惯例进行编码”范例:Grails。Grails 将 Groovy 用作基础语言,因此它在 JVM 上运行并可以利用任何现有的 Java API。
如果您是 Java 开发人员,便会发现使用此框架加快 Web 应用程序的开发非常有意义。如果您不是 Java 开发人员但需要更快速地开发和部署 Web 应用程序,那么 Grails 也是一个很棒的工具。
在本文中,我将使用 Richard 在他撰写文章时使用的同一应用程序/数据库模式来开发我的第一个 Grails 应用程序。密切关注!
什么是 Groovy?什么是 Grails?
Groovy 是一种利用其他语言(如 Ruby、Jython 和 Smalltalk)中的特性的动态语言。Groovy 在 Java VM 上运行,并使任何现有的 Java 对象(以及所有 API)可用于 Groovy。Groovy 当前遵循 JSR-241 中的标准;您可以在 Groovy 网站及其项目主管 (Guillaume Laforge) 的网志中了解有关该语言的详细信息。
Grails 之于 Groovy 相当于 Ruby on Rails 之于 Ruby。(该名称最初为“Groovy On Rails”,现在已改为“Grails”以避免混淆/竞争。)与 Ruby on Rails 一样,Grails 用于创建 CRUD(创建、读取、更新、删除)Web 应用程序。您可以在 Grails 网站及其项目主管 (Graeme Rocher) 的网志中了解有关 Grail 的详细信息。
下面,我们将深入了解一下该示例应用程序。
示例:产品目录
第 1 步:设置 Oracle 数据库
如果您尚未设置 Richard 文章中的模式和表,则只需创建下列对象:
CREATE TABLE comics ( id NUMBER(10) NOT NULL, title VARCHAR2(60), issue NUMBER(4), publisher VARCHAR2(60), PRIMARY KEY (id) ); CREATE SEQUENCE comics_seq; |
我根据该文章在 ruby 模式中创建了该表。
第 2 步:安装 Grails
Grails 安装非常简单,安装指南中有述。基本步骤:
- 下载二进制文件(我使用了 Grails 0.2)
- 设置不同的环境变量(GRAILS_HOME、JAVA_HOME、PATH),我使用了 Java 5。
完成!
第 3 步:创建 Web 应用程序
现在您已经安装了本产品,下一步是创建应用程序本身。
创建应用程序。create-app 命令使用模板(利用占位府表示应用程序的不同组件,如配置、MVC、库等)创建了完整的项目。在命令行界面中输入以下命令:
> grails create-app .... ..... create-app: [input] Enter application name: comics_catalog ..... |
您将看到,Grails 频繁使用 Ant。create-app 命令将请求您输入应用程序名称;例如,输入 comics_catalog。
创建的应用程序包含一个目录列表,从而使您可以使用 Groovy、Grails 以及其他 Web 组件开始构建该应用程序。
添加业务逻辑和模型:域类。Grails 和 Ruby on Rails 之间的最大差别之一是,使用前者,应用程序开发的主要组件不是表,而是域类。域类是业务应用程序的核心,它包含应用程序的状态和行为。
因此,下一步是为 comics 创建一个域类。为此,您只需转到项目的主目录(例如,cd comics_catalog)并运行 create-domain-class。
> cd comics_catalog > grails create-domain-class .... create-domain-class: [input] Enter domain class name: comics .... |
当命令请求您输入类名时,请输入“comics”。Grails 使用的命名惯例与 Ruby on Rails 的不同,因此,您需要使用同一名称来命名类和要在其上映射对象的表。持久性层使用 GROM(Grails 对象关系映射)创建,后者利用了 JBoss Hibernate。
注:在本示例中,我们利用了一个现有的数据库对象并基于它来创建域类。Grails 通常使用另一种方法(即所有内容由应用程序驱动)— 您首先创建域类,然后 Grails 将创建其他数据库对象。
Comics 类不包含任何有关映射本身的信息,因此您必须在该域类中创建不同的属性。您将在域类中开始使用 Groovy。域类位于以下位置:
./comics_catalog/grails-app/domain/Comics.groovy
请注意,默认情况下 Grails 使用两个属性创建该类:id 和 version。将它们保存到适当的位置,并添加标题、期号和出版商。
|
class Comics { @Property Long id @Property Long version
// new properties for the Comics class @Property String title @Property Long issue @Property String publisher
String toString() { "${this.class.name} :$id" } } |
现在,您已经设置了所有内容并准备运行 magic 命令,该命令将创建不同的屏幕和流。
从 domain 类中创建不同的屏幕。您现在可以运行 generate-all 命令来创建所有不同的屏幕。