Having problems accessing Oracle


#1

First approach: bare metal

require ‘java’
require ‘rubygems’
require “c:/ruby/jruby-1.2.0/lib/ojdbc14.jar” # should be redundant,
but
tried it anyway
odriver = Java::JavaClass.for_name(“oracle.jdbc.driver.OracleDriver”)
puts odriver.java_class
url = “jdbc:oracle:thin:@myhost:1521:mydb”
puts “About to connect…”
con = java.sql.DriverManager.getConnection(url, “myuser”, “mypassword”);
if con
puts " connection good"
else
puts " connection failed"
end

The result of the above is:

sqltest.rb:4: cannot load Java class oracle.jdbc.driver.OracleDriver
(NameError)

Second approach: Active Record

require ‘rubygems’
gem ‘ActiveRecord-JDBC’
require ‘jdbc_adapter’
require ‘active_record’
require ‘active_record/version’
require “c:/ruby/jruby-1.2.0/lib/ojdbc14.jar” # should be redundant…

ActiveRecord::Base.establish_connection(
:adapter => ‘jdbc’,
:driver => ‘oracle.jdbc.driver.OracleDriver’,
:url => ‘jdbc:oracle:thin:@myhost:1521:mydb’,
:username=>‘myuser’,
:password=>‘mypassword’
)
ActiveRecord::Base.connection.execute(“SELECT * FROM mytable”)

The result of this is:

C:/ruby/jruby-1.2.0/lib/ruby/gems/1.8/gems/activerecord-jdbc-adapter-0.9.1/lib/active_recordconnection_adapters/jdbc_adapter.rb:330:in
`initialize’:
The driver encountered an error: cannot load Java class
oracle.jdbc.driver.OracleDriver (RuntimeError)

Essentially the same error no matter how I go about it.

Gems:

ActiveRecord-JDBC (0.5)

activerecord-jdbc-adapter (0.9.1)

activerecord (2.2.2)

What am I missiing?

Thanks,


#2

Hi,

I have been able to configure an Oracle connection via Active Record. I
can connect and read data, but I am having problems with date and time
fields.

However, you should find the code in my thread useful to see a basic
config that works for me.

See: http://www.ruby-forum.com/topic/184366#new

If you do this, can you please reply to my thread and let me know how
you get on with date/time fields?

Many Thanks

Adrian

Robert B. wrote:

First approach: bare metal

require ‘java’
require ‘rubygems’
require “c:/ruby/jruby-1.2.0/lib/ojdbc14.jar” # should be redundant,
but
tried it anyway
odriver = Java::JavaClass.for_name(“oracle.jdbc.driver.OracleDriver”)
puts odriver.java_class
url = “jdbc:oracle:thin:@myhost:1521:mydb”
puts “About to connect…”
con = java.sql.DriverManager.getConnection(url, “myuser”, “mypassword”);
if con
puts " connection good"
else
puts " connection failed"
end

The result of the above is:

sqltest.rb:4: cannot load Java class oracle.jdbc.driver.OracleDriver
(NameError)

Second approach: Active Record

require ‘rubygems’
gem ‘ActiveRecord-JDBC’
require ‘jdbc_adapter’
require ‘active_record’
require ‘active_record/version’
require “c:/ruby/jruby-1.2.0/lib/ojdbc14.jar” # should be redundant…

ActiveRecord::Base.establish_connection(
:adapter => ‘jdbc’,
:driver => ‘oracle.jdbc.driver.OracleDriver’,
:url => ‘jdbc:oracle:thin:@myhost:1521:mydb’,
:username=>‘myuser’,
:password=>‘mypassword’
)
ActiveRecord::Base.connection.execute(“SELECT * FROM mytable”)

The result of this is:

C:/ruby/jruby-1.2.0/lib/ruby/gems/1.8/gems/activerecord-jdbc-adapter-0.9.1/lib/active_recordconnection_adapters/jdbc_adapter.rb:330:in
`initialize’:
The driver encountered an error: cannot load Java class
oracle.jdbc.driver.OracleDriver (RuntimeError)

Essentially the same error no matter how I go about it.

Gems:

ActiveRecord-JDBC (0.5)

activerecord-jdbc-adapter (0.9.1)

activerecord (2.2.2)

What am I missiing?

Thanks,


#3

Try changing this
…for_name(“oracle.jdbc.driver.OracleDriver”)
to
for_name(“oracle.jdbc.driver.OracleDriver”, false,
JRuby.runtime.jruby_class_loader)

The jvm class path does not get the jruby required jars, so you have
to use a class loader that can. Hope that helps.

On Wed, Apr 15, 2009 at 7:27 PM, rob08 removed_email_address@domain.invalid wrote:

con = java.sql.DriverManager.getConnection(url, “myuser”, “mypassword”);

:adapter => ‘jdbc’,
`initialize’:
What am I missiing?

Thanks,


View this message in context: Having problems accessing Oracle
Sent from the JRuby - User mailing list archive at Nabble.com.


To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email

#4

In my experience, this hasn’t worked with out-of-the-box JRuby since
-Xbootclasspath was added to the jruby.bat startup script back in 1.1.2.
Whether the jar is specified externally in a CLASSPATH env variable or
on
the command line, or internally via “require”, and whether the class is
loaded in the normal manner (which in JRuby is merely to reference it,
e.g.,
Java::oracle.jdbc.driver.OracleDriver) or by specifying either the JRuby
or
System classloader explicitly, *the driver does not see the correct
java.sql.DriverManager with which to register itself upon loading. *

There are two (and-a-half) workarounds that I know of. (There may be
others, but I have minimal patience for screwing around with this sort
of
configuration stuff. Anyone with more/better approaches please jump
in.)

  1. In jruby.bat, remove -Xbootclasspath, prepending the JRUBY_CP to the
    main
    classpath, i.e.:

    before: … -Xbootclasspath/a:"%JRUBY_CP%" -classpath
    “%CP%;%CLASSPATH%” …

    after: … -classpath “%JRUBY_CP%;%CP%;%CLASSPATH%” …

In other words, go back to the pre-1.1.2 startup method. However,
you’ll
lose the benefit of the improved startup speed that -Xbootclasspath
provides.

  1. Add the JDBC driver jar(s) (e.g. ojdbc14.jar) to -Xbootclasspath.
    This
    preserves the improvement in JRuby startup time.

2.5 Copy the JDBC driver jars to /path/to/jruby/lib. They’ll be added
to
-Xbootclasspath.

None of these are ideal in that you need to manually tweak the standard
JRuby installation, and will have to remember to do so whenever you
upgrade
either JRuby or your drivers.

BTW, you can check which drivers are registered using:

java.sql.DriverManager.drivers.to_a

-Bill


#5

johnny P-2 wrote:

Try changing this
…for_name(“oracle.jdbc.driver.OracleDriver”)
to
for_name(“oracle.jdbc.driver.OracleDriver”, false,
JRuby.runtime.jruby_class_loader)

The jvm class path does not get the jruby required jars, so you have
to use a class loader that can. Hope that helps.

Johnny, thanks for your response.

I tried your suggestion but now I get:

sqltest.rb:14: wrong # of arguments(3 for 1) (ArgumentError)

It seems that JRuby cannot for the overload…


View this message in context:
http://www.nabble.com/Having-problems-accessing-Oracle-tp23070394p23088562.html
Sent from the JRuby - User mailing list archive at Nabble.com.


To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email

#6

Thanks Bill,

I tried suggestion 1: made no difference - cannot load Java class
oracle.jdbc.driver.OracleDriver (NameError)

Suggestion 2: I attempted this (I think) by including ojdbc*.jar in the
call
to setjrubycp in _jrubyvars.bat. Made no difference.

Suggestion 2.5: It’s already there.

Bill D. wrote:

java.sql.DriverManager with which to register itself upon loading. *
“%CP%;%CLASSPATH%” …
2.5 Copy the JDBC driver jars to /path/to/jruby/lib. They’ll be added to

-Bill


View this message in context:
http://www.nabble.com/Having-problems-accessing-Oracle-tp23070394p23089710.html
Sent from the JRuby - User mailing list archive at Nabble.com.


To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email

#7

Bah! After all this time it looks like my ojdbc14.jar file is corrupt!

Stupid Oracle web site…

:-U

View this message in context:
http://www.nabble.com/Having-problems-accessing-Oracle-tp23070394p23094079.html
Sent from the JRuby - User mailing list archive at Nabble.com.


To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email

#8

rob08 wrote:

Bah! After all this time it looks like my ojdbc14.jar file is corrupt!

Stupid Oracle web site…

Given a non-corrupt jar from Oracle, what method now works?


To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email

#9

BTW, my suggestion #2.5 no longer works (boot classpath construction
changed
a few revisions back), but #1 and #2 should still get around the
problem.

-Bill


#10

For completeness, I also tried specifying the class loader with
ojdbc14.jar
in the classpath as follows:

C:\ruby>set C
CLASSPATH=c:\ruby\ojdbc14.jar
C:\ruby>dir %CLASSPATH%
17/04/2009 03:14 PM 1,536,979 ojdbc14.jar
C:\ruby>jirb
irb(main):001:0> require ‘java’
=> false
irb(main):002:0> c =
java.lang.Class.for_name(“oracle.jdbc.driver.OracleDriver”, false,
JRuby.runtime.jruby_class_loader
)
=> #>
irb(main):003:0> con =
java.sql.DriverManager.getConnection(“jdbc:oracle:thin:@myhost:1521:mydb”,
“myuser”, “mypass”)
NativeException: java.sql.SQLException: No suitable driver

irb(main):004:0> puts java.sql.DriverManager.drivers.to_a
=> nil


#11

Michael C.-4 wrote:

Given a non-corrupt jar from Oracle, what method now works?

I have success using plain JDBC and ActiveRecord using scripts as above.

I have success when the ojbc14.jar file is in my jruby/lib directory.

I have failure if I take ojdbc14.jar out of the lib directory, place is
somewhere else and set it in the shell CLASSPATH variable (which seems
weird
because I always thought the lib directory thing was just for convience
and
essentially the same as adding the JAR in CLASSPATH).

Rob


View this message in context:
http://www.nabble.com/Having-problems-accessing-Oracle-tp23070394p23128918.html
Sent from the JRuby - User mailing list archive at Nabble.com.


To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email