Qual è il modo corretto di utilizzare il driver JDBC di OrientDB con ActiveRecord?
Sto cercando di connettere un'applicazione Rails 3.2 a OrientDB 1.4. Ho installato la gemma activerecord-jdbc-adapter
e configurato il database.yml
come segue:
development:
adapter: jdbc
username: admin
password: admin
driver: com.orientechnologies.orient.jdbc.OrientJdbcDriver
url: jdbc:orient:local:db/test_db2
Carico il driver JDBC di OrientDB come segue:
# in config/application.rb:
require "/home/myuser/jars/orientdb-jdbc-1.4.0-all.jar"
La seguente eccezione viene lanciata all'avvio dell'applicazione (utilizzando 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)
...
C'è qualcosa che manca nella mia configurazione? Qual è il modo corretto di utilizzare il driver JDBC di OrientDB con ActiveRecord?
risposte:
1 per risposta № 1Mentre activerecord-jdbc-adapter
(teoricamente) supporta qualsiasi driver compilatore JDBC, utilizza le API e formula alcune ipotesi che potrebbero non funzionare per alcuni. Esp. con driver non pienamente compatibili come OrientDB-jdbc (almeno la versione 1.4) è.
In questo caso AR-JDBC tenta di risolvere i tipi supportati dai metadati DB: http://git.io/s7g47A ma da allora metadata.getTypeInfo()
restituisce un imprevisto null
invece di un reale ResulSet
oggetto tutto fallisce male. Questo potrebbe essere migliorato gestendo i tipi "null" sovrascrivendo native_database_types
metodo in Ruby e / o qualche altro codice suLato AR-JDBC - anche se per il "driver" di OrientDB "potrebbe non essere sufficiente per farlo funzionare perfettamente con AR-JDBC ... sembra un ottimo adattamento per un'estensione AR-JDBC (supponendo che OrientDB possa gestire l'SQL generato da ActiveRecors / AREL).