使用OrientDB的JDBC驱动程序与ActiveRecord搭配使用

8

如何正确使用OrientDB的JDBC驱动程序与ActiveRecord?

我正在尝试将Rails 3.2应用程序连接到OrientDB 1.4。我安装了宝石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)
    ...

我的配置是否有缺失?在使用ActiveRecord时,使用OrientDB的JDBC驱动程序的正确方法是什么?


你在这个实现上成功了吗?你能推荐一个解决方案吗?谢谢... - Xdrone
1个回答

1

虽然 activerecord-jdbc-adapter 理论上支持任何 JDBC 兼容的驱动程序,但它使用的 API 和做出的一些假设可能对一些驱动程序不太适用。特别是对于像 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)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接