技术开发 频道

在JRuby中构建Apache Derby数据库应用程序的两种方法

使用 JDBC 事务

通常,修改数据库中的数据时,需要使用事务来保证更改都是在一个逻辑块中做出的。JDBC 的事务都可在 JRuby 中访问。在清单 8 中所示的示例中,调用 connection.setAutoCommit(false) 将启动事务,而调用 connection.rollback() 将回滚该事务。类似地,使用 connection.commit() 来提交事务。

清单8:通过 JDBC 用 JRuby 调用 Derby

            

connection = JavaSql::DriverManager.getConnection("jdbc:derby:jrubyDB;create=true",

"",

"")

connection.setAutoCommit(false)

insertStmt = connection.createStatement()

insertStmt.execute("insert into employees values (11,

'James Cotton',

'Research Associate',

'Lab 1')");

connection.rollback()

正如您所见,通过 JDBC 用 JRuby 调用 Derby 很简单并且几乎与使用纯 Java 代码完全相同。

在 JRuby 中使用 JDBC 的其他方法

到目前为止,编写了从 Ruby 调用 JDBC 的代码。从 JRuby 与 Derby 进行交互还有其他几种方法:

纯 Java 代码 —— 数据库访问代码可以用纯 Java 代码编写。您可以有一个希望嵌入 Ruby 的应用程序,可能允许用户在应用程序中编写一些脚本。此应用程序已经有一组用于执行所有必需的数据库访问的类。需要用户编写的脚本能够通过现有数据库访问对象来访问数据库。使用 JRuby,需要执行的全部操作就是使用 include_class 和 include_package 方法从 Ruby 脚本访问那些对象。这将让您只需编写一次数据库访问代码,而不用使用两种语言重新创建该代码。

ORM 工具 —— 与 Derby 进行交互的另一种方法是使用 ORM 工具。为此,可直接从 JRuby 使用一个 Java 的 ORM 库(例如,Hibernate 或 iBatis),或者通过编写的 Java 数据库访问对象来使用 Java 的 ORM 库。使用 ORM 工具的另一种方法是使用 Ruby 中编写的众多 ORM 工具之一 —— 目前最著名的是 ActiveRecord。

使用 ActiveRecord 连接至 Derby

此部分将说明如何使用 Ruby 的 ActiveRecord 库连接至 Apache Derby。

什么是 ActiveRecord?

ActiveRecord 是用纯 Ruby 编写的 ORM 库。它是 Active Record 设计范式的一个实现,如 Martin Fowler 在 Patterns of Enterprise Application Architecture 中所述(有关 Safari 书店 Web 站点上本书的链接,请参阅 参考资料)。ActiveRecord 是著名的用于 Ruby on Rails(常见的 Web 开发框架)的默认持久性机制。但是,ActiveRecord 不需要使用 Rails 框架。其惟一依赖的是名为 ActionSupport 的软件包;因而可以在 Rails 应用程序外部使用 ActiveRecord。

直到最近,使用 Derby 的 JRuby 开发人员还不能使用 ActiveRecord,因为 ActiveRecord 不提供本机 Derby 支持或任何 JDBC 支持。但是,JRuby 开发团队现在发布了 ActiveRecord-JDBC 库的首个版本。此库向 ActiveRecord 中添加了 JDBC 支持。虽然它仍处于初级阶段,但是此项目已经支持 Derby 数据库。库是新的,因此它还有一些限制,但是它在大多数情况下运行正常。ActiveRecord-JDBC 正处于主要开发阶段,因此可以期待很快会提供更多支持(对 Derby 和其他数据库)。

安装 ActiveRecord

ActiveRecord 和 ActiveRecord-JDBC 库都是作为 RubyGems 分发的。RubyGems 是一个 Ruby 的软件包管理器(该管理器拥有用于分发程序和库的标准格式),也是一个用于轻松安装、更新和删除程序和库的工具。JRuby 0.9 没有为 RubyGems 提供足够健壮的支持,以便执行所需的操作来独立运行 ActiveRecord。当下一个版本的 JRuby 推出时,支持独立运行应当不会有问题。在过渡期间,要在 JRuby 中利用 ActiveRecord,需要从 Subversion 存储库注销 JRuby:

  1. 为 JRuby 源代码创建一个目录,并将 JRUBY_HOME 环境变量设为新目录。
  2. 在该目录中打开命令提示符,并执行以下命令(假定 Subversion 客户机位于 PATH 中):svn co svn://svn.codehaus.org/jruby/trunk/jruby %JRUBY_HOME%

此命令将把最新的 JRuby 代码下载到计算机中。下载完源代码后,需要构建它:

  1. 输入命令 ant compile。要验证下载内容,也可以输入 ant test。如果获得消息 BUILD SUCCESSFUL,则知道安装没有问题。

现在需要获得两个 gem。首先需要使用 ActiveRecord 本身执行以下操作:

  1. 通过输入 gem install activerecord --no-ri --no-rdoc 下载 ActiveRecord。如果计算机上安装了 Ruby 和 JRuby,而且 Ruby 已在 JRuby 前面的路径中,则需要使用完整路径才能执行 gem 命令,如 %JRUBY_HOME%\bin\gem install activerecord --no-ri --no-rdoc

这将安装 ActiveRecord 和 ActiveSupport,ActiveRecord 所依赖的 gem。--no-ri--no-rdoc 用于告诉 JRuby 不为 gem 生成文档。应当添加这些命令,因为 JRuby 在执行这些任务时目前很慢。(如果需要查看 ActiveRecord 或 ActiveSupport 的文档,请参阅 参考资料 部分中的链接)。

接下来,需要 ActiveRecord-JDBC gem。

  1. 执行以下命令下载并安装 ActiveRecord-JDBC gem:gem install ActiveRecord-JDBC --no-ri --no-rdoc。完成安装后,将获得以下输出:Successfully installed ActiveRecord-JDBC, version 0.2.1

用 ActiveRecord 连接至 Derby 必须使用 ActiveRecord-JDBC 0.2.1 或更高版本。现在您已经可以使用 ActiveRecord 了。

0
相关文章