2013-07-13 16 views
8

Welcher Art ist die richtige Verwendung des OrientDB-JDBC-Treibers mit ActiveRecord?Verwenden des OrientDB-JDBC-Treibers mit ActiveRecord

Ich versuche, eine Rails 3.2 Anwendung mit OrientDB 1.4 zu verbinden. I installiert, um den Edelstein activerecord-jdbc-adapter, und konfiguriert ist, die database.yml wie folgt:

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

I der Orientdb der JDBC-Treiber geladen werden, wie folgt:

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

die folgende Ausnahme ausgelöst wird, wenn die Anwendung gestartet wird (unter Verwendung von 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) 
    ... 

Fehlt etwas in meiner Konfiguration? Was ist der richtige Weg, um OrientDBs JDBC-Treiber mit ActiveRecord zu verwenden?

+0

Waren Sie mit dieser Implementierung erfolgreich? Können Sie einen Lösungsansatz empfehlen? Vielen Dank... – Xdrone

Antwort

1

Während activerecord-jdbc-adapter (theoretisch) unterstützt JDBC Compilant-Treiber, verwendet es APIs und macht ein paar Annahmen, die für einige weniger gut funktionieren könnte. Esp. mit nicht-voll konformen Treibern wie orientdb-jdbc (mindestens Version 1.4) ist.

In diesem Fall AR-JDBC versucht unterstützten Typen von der DB-Meta-Daten zu beheben: http://git.io/s7g47A aber da metadata.getTypeInfo() ein unerwartetes null anstelle eines tatsächlichen ResulSet Objekt zurückgibt alle nicht schlecht. Dies könnte durch die Behandlung von "Null" -Typen verbessert werden, indem die Methode native_database_types in Ruby und/oder zusätzlicher Code auf der Seite von AR-JDBC überschrieben wird - obwohl sie für OrientDBs "Treiber" möglicherweise nicht ausreicht, um sie mit AR-JDBC voll funktionsfähig zu machen. .. klingt wie eine ziemlich gute Passform für eine AR-JDBC-Erweiterung (vorausgesetzt, OrientDB kann das SQL verarbeiten, das ActiveRecors/AREL generieren wird).