Grails 如何与 Firebird 集成

阅读更多
最近2年涌现出许多的Web快速开发框架,Grails便是一个基于Java,媲美Rails的Web快速开发框架。 《使用 Grails 快速开发 Web 应用程序》教程中介绍了Grails与MySQL集成的例子,非常简单。最近下载了Firebird,希望将其与Grails集成。Grails通过Hibernate实现ORM,理论上应该没问题,然而在实际部署中缺遇到了一些问题。

首先安装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

你可能感兴趣的:(Grails,Hibernate,JDBC,MySQL,Groovy)