将OrientDB的JDBC驱动程序与ActiveRecord一起使用

时间:2013-07-13 12:32:21

标签: ruby-on-rails activerecord jdbc jruby orientdb

将OrientDB的JDBC驱动程序与ActiveRecord一起使用的正确方法是什么?

我正在尝试将Rails 3.2应用程序连接到OrientDB 1.4。我安装了gem activerecord-jdbc-adapter,并按如下方式配置database.yml

development:
  adapter: jdbc
  username: admin
  password: admin
  driver:   com.orientechnologies.orient.jdbc.OrientJdbcDriver
  url:      jdbc:orient:local:db/test_db2

我按如下方式加载OrientDB的JDBC驱动程序:

# in config/application.rb:
require '/home/myuser/jars/orientdb-jdbc-1.4.0-all.jar'

当应用程序启动时(使用rails s)抛出以下异常:

java.lang.NullPointerException
    at arjdbc.jdbc.RubyJdbcConnection.unmarshalResult(RubyJdbcConnection.java:1187)
    at arjdbc.jdbc.RubyJdbcConnection.set_native_database_types(RubyJdbcConnection.java:537)
    at arjdbc.jdbc.RubyJdbcConnection$INVOKER$i$0$0$set_native_database_types.call(RubyJdbcConnection$INVOKER$i$0$0$set_native_database_types.gen)
    ...

我的配置中是否缺少某些内容?将OrientDB的JDBC驱动程序与ActiveRecord一起使用的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

虽然activerecord-jdbc-adapter(理论上)支持任何JDBC编译驱动程序,但它使用API​​并做出一些假设,这些假设可能对少数人来说效果不佳。 ESP。与不完全兼容的驱动程序,如 orientdb-jdbc (至少版本1.4)是。

在这种情况下,AR-JDBC尝试从数据库元数据中解析支持的类型:http://git.io/s7g47A但是metadata.getTypeInfo()会返回意外的null而不是实际的ResulSet对象都失败了。这可以通过覆盖Ruby中的native_database_types方法和/或AR-JDBC方面的一些额外代码来处理“null”类型来改进 - 尽管对于OrientDB的“驱动程序”,它仍然可能不足以使其完全正常运行AR-JDBC ......听起来非常适合AR-JDBC扩展(假设OrientDB可以处理ActiveRecors / AREL将生成的SQL)。