2013-07-13 26 views
8

在ActiveRecord中使用OrientDB的JDBC驱动程序的正确方法是什么?在ActiveRecord中使用OrientDB的JDBC驱动程序

我想连接到OrientDB 1.4的Rails 3.2应用程序。我安装宝石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驱动程序的正确方法是什么?

+0

您是否成功实施此实施?你能推荐一种解决方案吗?谢谢... – Xdrone

回答

1

尽管activerecord-jdbc-adapter(理论上)支持任何JDBC编译器驱动程序,但它使用API​​并做出了一些假设,可能对少数几个人来说工作不太好。 ESP。与不完全兼容的驱动程序,如orientdb-jdbc(至少版本1.4)是。

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