首先安装Firebird和Jaybird。下载并运行 Firebird-2.0.3.12981-1-Win32,将firebrid作为一个Service运行。将SYSDBA的口令更新为password:
gsec -user sysdba -pass masterkey -mo sysdba -pw password
然后为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数据库的命令如下:
CREATE DATABASE 'e:\db\Contact\dev.fdb' page_size 8192 user 'sysdba' password 'password';
注意在执行上述命令前,需要在e:\db目录下创建Contact目录。
下载 Jaybird 2.1.2,解压缩到e:\db目录。
依据教程中的步骤创建Grails Contact项目。缺省时,使用HSQLDB作为持久服务层,如果替换为Firebird,根据教程说明,需要编辑DataSource.groovy。Firebird与MySQL等DBMS不同,它的JDBC连接URL有两种方式,例如访问dev数据库,URL字符串应为:
jdbc:firebirdsql:localhost/3050:e:\db\Contact\dev.fdb
或者为: jdbc:firebirdsql://localhost:3050/e:\db\Contact\dev.fdb
但是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的要求了:
jdbc:firebirdsql://localhost:3050/dev
重新编辑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声明:
dialect = org.hibernate.dialect.FirebirdDialect
最后,需要把Firebird的JDBC驱动包(jaybird-2.1.2.jar)拷贝到Contact的lib目录下,执行
grails run-app从Web浏览器中访问http://localhost:8080/Contact,可以正常地访问Firebird了。
我的测试环境为: Windows XP/SP2 + JDK 1.5 + Grails 1.0RC4 。