`
pudding811
  • 浏览: 3559 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Grails on google App engine第二天

阅读更多
经过第一天的部署,小有成就(原谅我吧,就是这么容易满足).接下来就是考虑做个什么应用,大的应用没时间(能力也有限),小的应用也没什么意思,最后决定做一个个人站点(非常没创意...)

简单说下我的想法(只是想法,一切都没实现之前只是愿景)
最重要的模块个人的blog的发布系统(和普通的blog没什么两样):发表blog,留言,查看blog;后续的可能会加上一些小应用,例如:twitter,flickr,rss订阅,利用google的api尽可能多的集成(当然包括Google AdSense),顺便吼下google很好很强大(被拖走...),很期待9月份(听说,听说)将要推出的googl wave,本人申请了wave但是不够幸运。哇,扯了这么多没用的。

正文:在部署成功之后,马上想到的就是测试连接数据库,google采用的是App Engine 数据存储区,为java提供了两种接口jdo和jpa,因为google提供的文档偏重讲解了jdo,所以就选了jdo。

1.创建domain

在grails中安装完app-engine插件之后
grails create-domain-class account创建的领域类中默认创建了两个属性id和property1
import javax.jdo.annotations.*;
// import com.google.appengine.api.datastore.Key;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
class Account{

	@PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	Long id

	@Persistent
	String property1

    static constraints = {
    	id( visible:false)
	}
}


2.创建controller和view
google app-engine可以在本地建立存储区进行测试(一直不明白这个存储区到底是个什么东西),所以不用上传测试,直接在本地测试
grails generate-all account

3.启动app
grails app-engine run
启动之后在创建account的时候总是失败(后台没有报错)
经查原来grails自动创建的AccountController中发现了try了之后没有catch
def save = {
        def accountInstance = new Account(params)
		if(!accountInstance.hasErrors() ) {
			try{
				println "before storing id is ${accountInstance.id}"
				persistenceManager.makePersistent(accountInstance)
				println "after storing id is ${accountInstance.id}"
			}catch(e){  //手动加入catch
				println "exception!!!!!!!!!: $e"
				} 
			finally{
				flash.message = "Account ${accountInstance.id} created"
				redirect(action:show,id:accountInstance.id)	
			}
		}

打印出来的异常:
org.datanucleus.jdo.exceptions.ClassNotPersistenceCapableException: 
The class "The class "Account" is not persistable. 
This means that it either hasnt been enhanced, or that the enhanced version of the file is not in the CLASSPATH (or is hidden by an unenhanced version), or the Meta-Data/annotations for the class are not found." is not persistable. This means that it either hasnt been enhanced, or that the enhanced version of the file is not in the CLASSPATH (or is hidden by an unenhanced version), or the Meta-Data for the class is not found.
 [java] NestedThrowables:
 [java] org.datanucleus.exceptions.ClassNotPersistableException: 
The class "Account" is not persistable. 
This means that it either hasnt been enhanced, or that the enhanced version of the file is not in the CLASSPATH (or is hidden by an unenhanced version), or the Meta-Data/annotations for the class are not found.

凭借我拙略的英文异常提到了3点:
1.account没有被“增强”  //这个不可能 @Persistent注释就已经完成增强
2.classpath的问题    //我也将app的jar加入到了classpath 见Grails on google App engine开始
3.没发现注释  // 和第一条差不多


3.解决
貌似结果是没有发现domain account或者增强account出的问题,但是我都是按照手册来的啊,又检查了配置也没有问题,奇怪。
我google搜啊搜啊都没有找到解决办法(要不是用grails创建app的人不多,要不就是这个问题很低级),没办法,只有给一个国外做例子的作者发了邮件(不过我发现他很有可能不是外国人,至少不是美国人,因为他在北京时间18点左右给我回的邮件,哪个鬼会在早上六点一起来就看邮件,至少程序员不会)
他给我回的邮件很简单:

You domain class needs to be in a package when using app-engine. Please post questions to the mailing list or nabble forums

恩,domain应该在package中。
(让我发邮件至少得告诉我邮箱,至少论坛中没有,nabble论坛?算了吧,英文不过关,不丢人去了)
随后我将account加入到了一个package中,而且将对应的controller也建立了相应的package,并将accountController放入其中(经测试这是必须的)。

令人惊喜的结果--成功了。

还有两点需要说明:
命令行的方式ctrl+c并不能结束grails的运行,还要在任务管理器中手动结束掉java进程不知道*-nix怎么样,也可能是grails就这么设计的。
在grails app-engin run的最后一步非常的慢,最后找到是因为瑞星的监控,关闭之后就很快了
我的环境是windows powerCmd ue
分享到:
评论
1 楼 dldahua 2010-04-08  
我也遇到了相同的情况,但怎么改都不行啊,我用的是struts2的mvc模式,还望指教

相关推荐

    grails app

    创建一个Grails应用的第一步通常是使用`grails create-app`命令,这会生成项目的目录结构和基础文件。虽然我们没有图片,但我们可以从文件名"Hello"推测,这可能是应用的初始控制器或服务,或者是一个简单的"Hello,...

    Grails从入门指南(第二版)

    《Grails从入门指南(第二版)》是一本专为初学者设计的全面教程,旨在帮助读者快速掌握Grails框架的基础知识和高级特性。Grails是一个基于Groovy语言的开源Web应用开发框架,它简化了Java平台上的开发过程,提供了...

    Grails入门指南中文第二版.pdf

    《Grails入门指南中文第二版》是一本专为初学者设计的Grails框架教程,旨在帮助读者快速掌握Grails开发的基础知识和技能。Grails是一个基于Groovy语言的开源Web应用框架,它采用模型-视图-控制器(MVC)架构模式,极...

    grails 中文第二版

    ### Grails框架中文第二版知识点概述 #### 一、简介 **Grails 2.0新特性** 1. **面向开发的特性** - 改进了开发者体验,例如通过简化配置来提高开发效率。 - 引入了新的工具和功能,如Groovy模板引擎Thymeleaf...

    Grails入门指南第二版学习笔记

    ### Grails 入门指南第二版学习笔记 #### 第二章:Grails 应用的基础操作与领域类 - **创建 Grails 应用** - 使用 `grails create-app racetrack` 命令来创建一个新的 Grails 应用程序。 - `racetrack` 是应用的...

    grails-test-app:使用grails和gradle构建简单的Web应用程序

    grails-test-app 目标 使用Groovy来实现RESTful API Web应用程序。 或用于RESTful API实现)或您要使用的任何框架。 使用Robotframework( )编写一个测试用例,以在Google上搜索“ Ruckus Wireless”,并检查是否...

    Grails从零开始开发项目二

    在Grails框架中,Groovy不仅用于编写控制器、服务、领域模型等核心组件,还广泛应用于脚本和配置文件,如`grails-app/conf/BuildConfig.groovy`和`grails-app/init/BootStrap.groovy`。这些文件定义了项目的构建配置...

    Grails入门指南第二版里面的赛马项目

    **Grails 入门指南第二版中的赛马项目详解** Grails 是一个基于Groovy语言的开源Web应用框架,它采用MVC(Model-View-Controller)架构模式,旨在简化开发流程并提高开发效率。本项目是《Grails 入门指南第二版》中...

    第一个grails程序

    在"第一个grails程序"中,我们通常会看到一个典型的Grails项目结构,包括以下几个关键部分: 1. **src/main/groovy**:这个目录存放所有Groovy源代码,包括应用程序的主要业务逻辑和控制器。 2. **src/main/...

    grails快速开发web

    #### 二、Grails 的核心特性 - **面向领域语言 (DSL)**:Grails 提供了一种面向领域的语言,让开发者能够用更少的代码完成更多的工作。 - **自动配置**:Grails 自动处理很多配置细节,如数据源、日志管理等,减少...

    使用 Grails 快速开发 Web 应用程序

    目录结构包括`grails-app/conf`存储配置文件,`grails-app/controllers`存放控制器,`grails-app/domain`包含领域类,`grails-app/services`用于业务逻辑,`grails-app/views`是视图文件等。 在了解了Grails的基本...

    Grails权威指南 Grails权威指南

    `grails test-app`命令即可运行所有相关的测试。 9. **国际化与本地化**:Grails内置了i18n支持,允许开发者轻松处理多语言环境,提高应用的全球适用性。 10. **持续集成与部署**:Grails与常见的CI/CD工具如...

    grails-用户手册

    例如,`grails create-app` 创建新应用,`generate-controller` 生成控制器,`generate-domain-class` 生成领域类。 四、GORM(Grails Object Relational Mapping) GORM是Grails的持久化框架,它实现了Hibernate...

    grails 文档

    - 使用`grails create-app`命令创建一个新的Grails应用。 - 命令示例:`grails create-app helloworld` - 这将在当前目录下创建一个名为`helloworld`的新目录,包含所有必要的文件和配置。 **运行Grails应用:** ...

    Grails Grails Grails

    Grails 的设计深受Ruby on Rails的影响,提供了MVC(模型-视图-控制器)架构模式,允许开发者快速构建动态、数据库驱动的Web应用。 **Groovy 语言基础** Groovy 是一种动态类型的、面向对象的编程语言,它可以无缝...

    grails框架

    实际上,一个grails插件和一个grails应用基本是完全一样的,同样可以使用grails run-app命令来运行。区别仅在于一个插件的根目录下需要提供一个fooplugin.groovy文件,提供插件的一些描述信息。

    grails login

    使用Grails命令行工具创建一个新的Grails应用,例如`grails create-app loginDemo`。这将在指定目录下生成一个完整的Grails项目结构。 **3. 数据库配置** Grails默认使用H2内存数据库,如需使用MySQL,需修改`...

    Grails权威指南第二版

    Grails权威指南第二版 Grails是一个搭建在动态语言 Groovy 之上的开源 MVC 快速 Web 开发框架。使用 Grails 可以提高 Web 开发的效率,降低 Web 开发的复杂度。 本书由Grails项目负责人Graeme Keith Rocher编写,极...

    Beginning_Groovy_and_Grails开源项目教学代码第二部分

    《Grails开源项目教学代码第二部分》是针对Groovy和Grails编程语言的深入学习资源,旨在帮助开发者进一步掌握这两个强大的工具。Groovy是一种简洁、动态的Java平台上的编程语言,它提供了更简单的语法和更高的生产力...

    grails中文参考手册

    - **创建一个Grails应用**:使用`grails create-app`命令可以快速创建一个新的Grails应用,这将生成基本的项目结构。 - **Hello World示例**:在新创建的应用中,你可以通过创建一个简单的控制器和视图来实现经典...

Global site tag (gtag.js) - Google Analytics