经测试,在glassfishv3上能完美部署grails1.1.1项目。
1.数据源:
既然用的是glassfish,当然最好用它的jndi数据源,先配glassfish的数据源,连接池,如命名为:jdbc/cms。需要将对应数据库的jdbc驱动拷贝到形如:glassfishv3-prelude\glassfish\domains\yourdomain\lib ,也就是你创建的domain下找,这样数据源才能配置成功。也许可以配置全局的,但是这应该没有意义。
在grails项目中的DataSource.groovy中,做如下配置:
dataSource {
pooled = false
}
hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=true
cache.provider_class='org.hibernate.cache.EhCacheProvider'
}
// environment specific settings
environments {
development {
dataSource {
driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
username = "sa"
password = "xxxx"
dbCreate = "update" // one of 'create', 'create-drop','update'
url = "jdbc:sqlserver://localhost:1433;DatabaseName=cms"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:sqlserver://localhost:1433;DatabaseName=cms"
}
}
production {
dataSource {
dbCreate = "update"
jndiName = "jdbc/cms"
}
}
}
红色部分是数据源的 jndi 名,grails文档上写的是 jndiName = "java:comp/env/myDataSource" ,经验证,不通过,需写成红色部份。
2.配置grails的UrlMapping.groovy
加上:
static excludes = ["/images/**", "/css/**"]
这里配置的目的是,让glassfish来处理静态资源。
3.配置备用文档
你可能需要做,形如www.xxx.com/uploads/images/xxx.jpg的一个目录映射。方法:
在您的grails项目中WEB-INF目录下,创建sun-web.xml
<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 7.0 Servlet 2.3//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_3-0.dtd'>
<sun-web-app>
<property name="alternatedocroot_1" value="from=/uploads/* dir=G:\java\webapp\xxx\" />
<locale-charset-info>
<parameter-encoding default-charset="UTF-8" />
</locale-charset-info>
</sun-web-app>
这样,形如www.xxx.com/uploads/images/xxx.jpg会,映射到 G:\java\webapp\xxx\uploads\images\xxx.jpg
注意:from=/uploads/* 中的 /uploads 会追加到dir目录路径后面,所以创建目录时,需要注意,否则无法映射。
这样配置以后,浏览器中输入www.xxx.com/uploads 时,会显示这个目录下的所有文件,和文件夹。您可能不希望这样,可以编辑glassfishv3-prelude\glassfish\domains\yourdomain\config\default-web.xml文件,找到:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
红色部份改为false,默认为true。改成false后,您就可以禁止目录访问了。
我同时在tomcat6上也部署过同样的grails应用。从感观上,glassfishv3下面跑的比tomcat6下跑得快很多。应用中有很多图片,glassfishv3处理静态资源和性能上,从感观上可以感到明显差异。既然感观上能感觉出来了,就先不用工具做毫秒级的性能比较了。
不信,您自己个比较吧。