最近2年涌现出许多的Web快速开发框架,Grails便是一个基于Java,媲美Rails的Web快速开发框架。[url=http://www.ibm.com/developerworks/cn/edu/j-dw-java-grails.html?S_TACT=105AGX52&S_CMP=NL&ca=dnl-cn-01092008]《使用 Grails 快速开发 Web 应用程序》[/url]教程中介绍了Grails与MySQL集成的例子,非常简单。最近下载了Firebird,希望将其与Grails集成。Grails通过Hibernate实现ORM,理论上应该没问题,然而在实际部署中缺遇到了一些问题。
首先安装Firebird和Jaybird。下载并运行[url=http://downloads.sourceforge.net/firebird/Firebird-2.0.3.12981-1-Win32.exe]Firebird-2.0.3.12981-1-Win32[/url],将firebrid作为一个Service运行。将SYSDBA的口令更新为password:
[code]gsec -user sysdba -pass masterkey -mo sysdba -pw password[/code]
然后为Grails Contact项目创建三个Database文件:
dev.fdb ---- 作为Grails开发库,文件路径为 e:\db\Container\dev.fdb
test.fdb ---- 作为Grails测试库,文件路径为 e:\db\Container\test.fdb
prod.fdb ---- 作为Grails产品库,文件路径为 e:\db\Container\prod.fdb
在Dos窗口中进入Firebird的iSQL命令模式,创建dev数据库的命令如下:
[code]CREATE DATABASE 'e:\db\Contact\dev.fdb' page_size 8192 user 'sysdba' password 'password';[/code]
注意在执行上述命令前,需要在e:\db目录下创建Contact目录。
下载[url=http://www.firebirdsql.org/index.php?op=files&id=jaybird]Jaybird 2.1.2[/url],解压缩到e:\db目录。
依据教程中的步骤创建Grails Contact项目。缺省时,使用HSQLDB作为持久服务层,如果替换为Firebird,根据教程说明,需要编辑DataSource.groovy。Firebird与MySQL等DBMS不同,它的JDBC连接URL有两种方式,例如访问dev数据库,URL字符串应为:
[b]jdbc:firebirdsql:localhost/3050:e:\db\Contact\dev.fdb[/b]
或者为:[b]jdbc:firebirdsql://localhost:3050/e:\db\Contact\dev.fdb[/b]
但是Grails只能识别第2种URL模式,并且数据库名字不能包含盘符、目录分割符等。经过对Firebird的研究,发现解决的方法是使用Firebird数据库别名,即为以上三个数据库在aliases.conf中设置别名:
这样,访问dev数据库的JDBC URL可以满足Grails的要求了:
[b]jdbc:firebirdsql://localhost:3050/dev[/b]
重新编辑Database.groovy,修改访问Firebird的DataSource的设置,文件内容如下:
注意,与MySQL不同,必须在添加针对Firebird的Hibernate Dialect声明:
[color=red][b]dialect = org.hibernate.dialect.FirebirdDialect[/b][/color]
最后,需要把Firebird的JDBC驱动包(jaybird-2.1.2.jar)拷贝到Contact的lib目录下,执行
我的测试环境为:[b]Windows XP/SP2 + JDK 1.5 + Grails 1.0RC4[/b] 。
首先安装Firebird和Jaybird。下载并运行[url=http://downloads.sourceforge.net/firebird/Firebird-2.0.3.12981-1-Win32.exe]Firebird-2.0.3.12981-1-Win32[/url],将firebrid作为一个Service运行。将SYSDBA的口令更新为password:
[code]gsec -user sysdba -pass masterkey -mo sysdba -pw password[/code]
然后为Grails Contact项目创建三个Database文件:
dev.fdb ---- 作为Grails开发库,文件路径为 e:\db\Container\dev.fdb
test.fdb ---- 作为Grails测试库,文件路径为 e:\db\Container\test.fdb
prod.fdb ---- 作为Grails产品库,文件路径为 e:\db\Container\prod.fdb
在Dos窗口中进入Firebird的iSQL命令模式,创建dev数据库的命令如下:
[code]CREATE DATABASE 'e:\db\Contact\dev.fdb' page_size 8192 user 'sysdba' password 'password';[/code]
注意在执行上述命令前,需要在e:\db目录下创建Contact目录。
下载[url=http://www.firebirdsql.org/index.php?op=files&id=jaybird]Jaybird 2.1.2[/url],解压缩到e:\db目录。
依据教程中的步骤创建Grails Contact项目。缺省时,使用HSQLDB作为持久服务层,如果替换为Firebird,根据教程说明,需要编辑DataSource.groovy。Firebird与MySQL等DBMS不同,它的JDBC连接URL有两种方式,例如访问dev数据库,URL字符串应为:
[b]jdbc:firebirdsql:localhost/3050:e:\db\Contact\dev.fdb[/b]
或者为:[b]jdbc:firebirdsql://localhost:3050/e:\db\Contact\dev.fdb[/b]
但是Grails只能识别第2种URL模式,并且数据库名字不能包含盘符、目录分割符等。经过对Firebird的研究,发现解决的方法是使用Firebird数据库别名,即为以上三个数据库在aliases.conf中设置别名:
dev = e:\db\Contact\dev.fdb
test = e:\db\Contact\test.fdb
prod = e:\db\Contact\prod.fdb
这样,访问dev数据库的JDBC URL可以满足Grails的要求了:
[b]jdbc:firebirdsql://localhost:3050/dev[/b]
重新编辑Database.groovy,修改访问Firebird的DataSource的设置,文件内容如下:
dataSource {
pooled = false
driverClassName = "org.firebirdsql.jdbc.FBDriver"
username = "sysdba"
password = "password"
dialect = org.hibernate.dialect.FirebirdDialect
}
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 {
dbCreate = "update" // one of 'create', 'create-drop','update'
url = "jdbc:firebirdsql://localhost:3050/dev"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:firebirdsql://localhost:3050/test"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:firebirdsql://localhost:3050/prod"
}
}
}
注意,与MySQL不同,必须在添加针对Firebird的Hibernate Dialect声明:
[color=red][b]dialect = org.hibernate.dialect.FirebirdDialect[/b][/color]
最后,需要把Firebird的JDBC驱动包(jaybird-2.1.2.jar)拷贝到Contact的lib目录下,执行
grails run-app
从Web浏览器中访问http://localhost:8080/Contact,可以正常地访问Firebird了。我的测试环境为:[b]Windows XP/SP2 + JDK 1.5 + Grails 1.0RC4[/b] 。