最近使用grails开发了一个小模块,总共就五个表不到10功能,如果使用熟悉的spring+hibernate估计一两天就能完成,使用grails缺花了我一个星期。毕竟学习新东西还是要花一点时间,一边看文档一边写代码,又走了一点弯路。再加上不知道如何使用grails支持apache的AJP协议,自己写了一个支持AJP协议的Jetty服务。不过通过这段时间的使用感觉grails开发还是比较方便,不需要写那么多配置文件了。
Jetty服务代码(使用配置文件可能也可以,还没详细研究jetty本身的配置,所以自己写代码了)
public static void main(String[] args) throws Exception {
String contextPath = extractParam(args, "contextPath");
if (args == null || ArrayUtils.contains(args, "-?") || ArrayUtils.contains(args, "-h") || ArrayUtils.contains(args, "-help")) {
System.out.println("parameter format is: contextPath=xx port=xx webPath=xx useAJP");
return;
}
if (contextPath == null)
throw new Exception("contextPath parameter is not found");
String sPort = extractParam(args, "port");
if (sPort == null)
throw new Exception("port parameter is not found");
String webPath = extractParam(args, "webPath");
if (webPath == null)
throw new Exception("webPath parameter is not found");
//是否使用AJP协议
boolean useAJP = ArrayUtils.contains(args, "useAJP");
int port = new Integer(sPort);
Server server = new Server(port);
if (useAJP) {
Connector conn = new Ajp13SocketConnector();
conn.setPort(port);
server.setConnectors(new Connector[]{conn});
}
WebAppContext context = new WebAppContext();
context.setContextPath(contextPath);
context.setWar(webPath);
server.addHandler(context);
server.start();
}
在开发中遇到的第一个问题就是在Service保存两条数据到数据库,结果怎么调试也没有保存,程序也没错误。一开始以为是事务方面的问题,后来发现第二条数据有个字段没有在Domain中设置constraints的nullable属性为true。这个问题花了我半天的时间。因为做的不是CRUD界面,没在执行save方法时检查errors属性。所以要按照文档做好每一步,还不是仅仅凭自己的猜测。
第二个就是打包部署问题。不可能每次都使用war命令,然后把war文件都上传到服务器。或者把编译到C:\Documents and Settings\$user\.grails\1.0.3\projects\$projectName目录下的所有class都上传到远程服务器。这两种方式都不好,所以参考grails的脚步,自己写一个把所有class打成jar包的脚步,把服务器的WEB-INF/classes下所有class文件删除,再把jar包上传到远程服务器的lib目录下。以后修改程序只要更新一下jar包就可以了,我自己觉得很方便。不知道别人是如何解决这个问题的,国内使用grails做正式开发的好像不太多哦。
jar.groovy内容如下,把它放在$GRAILS_HOME/scripts目录下,执行grails jar就可以了。
import org.codehaus.groovy.grails.compiler.support.*
/**
* Gant script that creates a WAR file from a Grails project
*
* @author Huzhenglin
*
* @since 0.4
*/
Ant.property(environment:"env")
grailsHome = Ant.antProject.properties."env.GRAILS_HOME"
includeTargets << new File ( "${grailsHome}/scripts/Compile.groovy" )
target ('default':'Creates a jar file for deployment onto a Java EE application server.') {
depends( checkVersion,compile)
println 1
jar()
println "jar all class success"
}
target (jar: "The implementation target") {
def fileName = grailsAppName
println 1
def version = Ant.antProject.properties.'app.version'
if(version) {
version = '-'+version
}
else {
version = ''
}
fileName = "${basedir}/${fileName}${version}.jar"
println fileName
Ant.jar(destfile:fileName) {
fileset(dir:classesDirPath) {
include(name:"**/*.class")
}
}
}
分享到:
- 2008-09-11 13:51
- 浏览 4763
- 评论(5)
- 论坛回复 / 浏览 (5 / 4521)
- 查看更多
相关推荐
# 一、grails打包tomcat本地部署和jar部署[参考]
关于Grails开发的软件部署建议
Grails企业web应用开发与部署.pdf 很好的资源
关于grails企业web开发环境和部署的一些经验,和大家分享。
Grails Grails Grails Grails Grails
Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南Grails权威指南
Grails项目的应用越来越多,而对于初学者来说,在Eclipse下搭建Grails项目是一个难题,这个文档将教会你如何搭建Grails项目,希望对你有所帮助。
Grails入门指南中文pdf -- 针对grails1.0.4更新,附加idea8 开发grails的流程
Grails1.1中文文档
grails+Xfire webservice
grails-2.1.zip.001
4.1 简化的orm和grails对象关系映射(gorm) 4.2 gorm基础 4.3 设置属性可选 4.4 gorm中的关系 4.5 执行crud操作 4.5.1 创建书签 4.5.2 读取书签 4.5.3 更新书签 4.5.4 ...
在学习任何东西之前,最重要的是培养兴趣,Groovy世界最耀眼的技术之一--Grails相信大家早已耳闻,我将通过Grails实战系列文章 向您展现Grails的迷人风采,使您感受到Grails的魅力,以至疯狂地爱上Grails,并坠入...
详细讲解grails开发环境配置。 详细讲解grails连接mysql数据库,crud开发
Grails 中文 参考手册
这是一个在Eclipse下导入Grails项目,并对环境和报错进行相应调试的文档
Grails专为下一代JavaWeb应用程序而设计的框架,其借助于Groovy动态语言,使Web开发变得简单而方便。Grails尽量为更多现有的Java项目创建一个全面的框架(不仅局限于视图处理),这和当前一些Java框架提供给用户的一...
grails3.2.8 part1
grails grails入门经典 grails入门 grails例子 grails资料 通过自学一点点积累起来的,相信对你有帮助的。